diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java new file mode 100644 index 0000000..c2a889b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java @@ -0,0 +1,635 @@ +package com.casic.dcms.view.upload; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCommonCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; +import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.zolad.videoslimmer.VideoSlimmer; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class CommonCaseActivity extends AndroidxBaseActivity { + + private static final String TAG = "CommonCaseActivity"; + private final Context context = CommonCaseActivity.this; + private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private ProgressDialog progressDialog; + private EditableImageAdapter imageAdapter; + private AudioRecodeHelper audioRecodeHelper; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + private String audioUrl, videoUrl; + private boolean isFirstEnter = true; + + private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("视频压缩中..."); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); + progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); + + /** + * 计算 +图标 大小 + * + * CarrView水平外边距5dp + * RelativeLayout水平内边距10dp + * RecyclerView左边距100dp + * */ + int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); + int margins = FloatHub.dp2px(this, 3); + int itemSize = (realWidth - 4 * margins) / 3; + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); + params.setMargins(margins, margins, margins, margins); + params.gravity = Gravity.LEFT; + viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); + viewBinding.addVideoView.setLayoutParams(params); + + //图片九宫格 + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + uploadCaseLauncher.launch(intent); + } + }); + + /** + * 案卷录音 + * */ + AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { + @Override + public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { + viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); + audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseActivity.this).toString()); + break; + case MotionEvent.ACTION_UP: + audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) + window.dismiss(); + viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); + break; + } + return true; + } + }); + + audioRecodeHelper = new AudioRecodeHelper(); + audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { + @Override + public void onUpdate(double db, long time) { + imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); + textView.setText(LongHub.millsToTime(time)); + } + + @Override + public void onStop(String filePath) { + uploadViewModel.uploadAudio(new File(filePath)); + } + }); + } + }); + + /** + * 案卷视频 + * */ + viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PictureSelectorHelper.takeVideo(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + LocalMedia media = result.get(0); + //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" + //需要手动压缩视频 + String mediaRealPath = media.getRealPath(); + if (TextUtils.isEmpty(mediaRealPath)) { + //部分手机getRealPath可能为空,需要备用路径 + mediaRealPath = media.getPath(); + } + if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { + //如果默认和备用路径还是为空,则不压缩上传 + StringHub.show(context, "请先选择案卷类型"); + return; + } + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(mediaRealPath); + String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); + + assert defaultRotation != null; + compressVideo(mediaRealPath, defaultRotation, defaultBitrate); + } + }); + } + }); + + /** + * 重拍视频 + * */ + viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (viewBinding.videoPlayerView.isShown()) { + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("确定重新拍摄视频材料?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + viewBinding.videoPlayerView.setVisibility(View.GONE); + viewBinding.addVideoView.setVisibility(View.VISIBLE); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + } + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.audioModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + audioUrl = resultBean.getData(); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + if (!TextUtils.isEmpty(audioUrl)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); + } + } + } + }); + uploadViewModel.videoModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 + viewBinding.addVideoView.setVisibility(View.GONE); + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + videoUrl = resultBean.getData(); + String completeURL = StringHelper.appendCompleteURL(videoUrl); + viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(completeURL) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 6.0以上视频压缩 + */ + private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { + Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); + String outputVideoFile = FileUtils.getOutputVideoFile(); + int width, height, bitrate; + if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 + width = LocaleConstant.DEFAULT_WIDTH / 2; + height = LocaleConstant.DEFAULT_HEIGHT / 2; + } else { + width = LocaleConstant.DEFAULT_HEIGHT / 2; + height = LocaleConstant.DEFAULT_WIDTH / 2; + } + if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { + bitrate = LocaleConstant.BITRATE; + } else { + bitrate = Integer.parseInt(defaultBitrate) / 2; + } + VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { + @Override + public void onStart() { + progressDialog.show(); + } + + @Override + public void onProgress(float percent) { + progressDialog.setProgress((int) percent); + } + + @Override + public void onFinish(boolean result) { + if (result) { + uploadViewModel.uploadVideo(new File(outputVideoFile)); + } else { + StringHub.show(CommonCaseActivity.this, "请先选择案卷类型"); + } + progressDialog.dismiss(); + } + }); + } + + /** + * 首次进入页面显示引导Popup + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (isFirstEnter) { + TextView textView = new TextView(this); + int padding = QMUIDisplayHelper.dp2px(this, 10); + textView.setPadding(padding, padding, padding, padding); + textView.setGravity(Gravity.CENTER); + textView.setText("按住即可开始录音"); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(textView) + .shadow(true) + .arrow(true) + .animStyle(QMUIPopup.ANIM_AUTO) + .dimAmount(0.6f)//60%透明度 + .onDismiss(null) + .show(viewBinding.recodeAudioButton); + isFirstEnter = false; + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "2", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java new file mode 100644 index 0000000..c2a889b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java @@ -0,0 +1,635 @@ +package com.casic.dcms.view.upload; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCommonCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; +import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.zolad.videoslimmer.VideoSlimmer; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class CommonCaseActivity extends AndroidxBaseActivity { + + private static final String TAG = "CommonCaseActivity"; + private final Context context = CommonCaseActivity.this; + private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private ProgressDialog progressDialog; + private EditableImageAdapter imageAdapter; + private AudioRecodeHelper audioRecodeHelper; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + private String audioUrl, videoUrl; + private boolean isFirstEnter = true; + + private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("视频压缩中..."); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); + progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); + + /** + * 计算 +图标 大小 + * + * CarrView水平外边距5dp + * RelativeLayout水平内边距10dp + * RecyclerView左边距100dp + * */ + int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); + int margins = FloatHub.dp2px(this, 3); + int itemSize = (realWidth - 4 * margins) / 3; + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); + params.setMargins(margins, margins, margins, margins); + params.gravity = Gravity.LEFT; + viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); + viewBinding.addVideoView.setLayoutParams(params); + + //图片九宫格 + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + uploadCaseLauncher.launch(intent); + } + }); + + /** + * 案卷录音 + * */ + AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { + @Override + public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { + viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); + audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseActivity.this).toString()); + break; + case MotionEvent.ACTION_UP: + audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) + window.dismiss(); + viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); + break; + } + return true; + } + }); + + audioRecodeHelper = new AudioRecodeHelper(); + audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { + @Override + public void onUpdate(double db, long time) { + imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); + textView.setText(LongHub.millsToTime(time)); + } + + @Override + public void onStop(String filePath) { + uploadViewModel.uploadAudio(new File(filePath)); + } + }); + } + }); + + /** + * 案卷视频 + * */ + viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PictureSelectorHelper.takeVideo(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + LocalMedia media = result.get(0); + //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" + //需要手动压缩视频 + String mediaRealPath = media.getRealPath(); + if (TextUtils.isEmpty(mediaRealPath)) { + //部分手机getRealPath可能为空,需要备用路径 + mediaRealPath = media.getPath(); + } + if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { + //如果默认和备用路径还是为空,则不压缩上传 + StringHub.show(context, "请先选择案卷类型"); + return; + } + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(mediaRealPath); + String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); + + assert defaultRotation != null; + compressVideo(mediaRealPath, defaultRotation, defaultBitrate); + } + }); + } + }); + + /** + * 重拍视频 + * */ + viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (viewBinding.videoPlayerView.isShown()) { + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("确定重新拍摄视频材料?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + viewBinding.videoPlayerView.setVisibility(View.GONE); + viewBinding.addVideoView.setVisibility(View.VISIBLE); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + } + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.audioModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + audioUrl = resultBean.getData(); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + if (!TextUtils.isEmpty(audioUrl)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); + } + } + } + }); + uploadViewModel.videoModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 + viewBinding.addVideoView.setVisibility(View.GONE); + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + videoUrl = resultBean.getData(); + String completeURL = StringHelper.appendCompleteURL(videoUrl); + viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(completeURL) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 6.0以上视频压缩 + */ + private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { + Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); + String outputVideoFile = FileUtils.getOutputVideoFile(); + int width, height, bitrate; + if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 + width = LocaleConstant.DEFAULT_WIDTH / 2; + height = LocaleConstant.DEFAULT_HEIGHT / 2; + } else { + width = LocaleConstant.DEFAULT_HEIGHT / 2; + height = LocaleConstant.DEFAULT_WIDTH / 2; + } + if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { + bitrate = LocaleConstant.BITRATE; + } else { + bitrate = Integer.parseInt(defaultBitrate) / 2; + } + VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { + @Override + public void onStart() { + progressDialog.show(); + } + + @Override + public void onProgress(float percent) { + progressDialog.setProgress((int) percent); + } + + @Override + public void onFinish(boolean result) { + if (result) { + uploadViewModel.uploadVideo(new File(outputVideoFile)); + } else { + StringHub.show(CommonCaseActivity.this, "请先选择案卷类型"); + } + progressDialog.dismiss(); + } + }); + } + + /** + * 首次进入页面显示引导Popup + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (isFirstEnter) { + TextView textView = new TextView(this); + int padding = QMUIDisplayHelper.dp2px(this, 10); + textView.setPadding(padding, padding, padding, padding); + textView.setGravity(Gravity.CENTER); + textView.setText("按住即可开始录音"); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(textView) + .shadow(true) + .arrow(true) + .animStyle(QMUIPopup.ANIM_AUTO) + .dimAmount(0.6f)//60%透明度 + .onDismiss(null) + .show(viewBinding.recodeAudioButton); + isFirstEnter = false; + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "2", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java deleted file mode 100644 index 9b96c13..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.media.MediaMetadataRetriever; -import android.text.TextUtils; -import android.util.Log; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadCommonCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.FileUtils; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.FloatHub; -import com.pengxh.androidx.lite.hub.LongHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; -import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; -import com.zolad.videoslimmer.VideoSlimmer; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CommonCaseUploadActivity extends AndroidxBaseActivity { - - private static final String TAG = "CaseUploadActivity"; - private final Context context = CommonCaseUploadActivity.this; - private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private ProgressDialog progressDialog; - private EditableImageAdapter imageAdapter; - private AudioRecodeHelper audioRecodeHelper; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - private String audioUrl, videoUrl; - private boolean isFirstEnter = true; - - private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - progressDialog = new ProgressDialog(this); - progressDialog.setMessage("视频压缩中..."); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); - progressDialog.setCancelable(false); - progressDialog.setCanceledOnTouchOutside(false); - - /** - * 计算 +图标 大小 - * - * CarrView水平外边距5dp - * RelativeLayout水平内边距10dp - * RecyclerView左边距100dp - * */ - int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); - int margins = FloatHub.dp2px(this, 3); - int itemSize = (realWidth - 4 * margins) / 3; - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); - params.setMargins(margins, margins, margins, margins); - params.gravity = Gravity.LEFT; - viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); - viewBinding.addVideoView.setLayoutParams(params); - - //图片九宫格 - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - uploadCaseLauncher.launch(intent); - } - }); - - /** - * 案卷录音 - * */ - AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { - @Override - public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { - viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); - window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); - audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseUploadActivity.this).toString()); - break; - case MotionEvent.ACTION_UP: - audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) - window.dismiss(); - viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); - break; - } - return true; - } - }); - - audioRecodeHelper = new AudioRecodeHelper(); - audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { - @Override - public void onUpdate(double db, long time) { - imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); - textView.setText(LongHub.millsToTime(time)); - } - - @Override - public void onStop(String filePath) { - uploadViewModel.uploadAudio(new File(filePath)); - } - }); - } - }); - - /** - * 案卷视频 - * */ - viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PictureSelectorHelper.takeVideo(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - LocalMedia media = result.get(0); - //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" - //需要手动压缩视频 - String mediaRealPath = media.getRealPath(); - if (TextUtils.isEmpty(mediaRealPath)) { - //部分手机getRealPath可能为空,需要备用路径 - mediaRealPath = media.getPath(); - } - if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { - //如果默认和备用路径还是为空,则不压缩上传 - StringHub.show(context, "请先选择案卷类型"); - return; - } - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(mediaRealPath); - String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); - String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); - - assert defaultRotation != null; - compressVideo(mediaRealPath, defaultRotation, defaultBitrate); - } - }); - } - }); - - /** - * 重拍视频 - * */ - viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (viewBinding.videoPlayerView.isShown()) { - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("确定重新拍摄视频材料?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - viewBinding.videoPlayerView.setVisibility(View.GONE); - viewBinding.addVideoView.setVisibility(View.VISIBLE); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - } - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.audioModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - audioUrl = resultBean.getData(); - /** - * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a - * */ - if (!TextUtils.isEmpty(audioUrl)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); - } - } - } - }); - uploadViewModel.videoModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 - viewBinding.addVideoView.setVisibility(View.GONE); - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - videoUrl = resultBean.getData(); - String completeURL = StringHelper.appendCompleteURL(videoUrl); - viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(completeURL) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 6.0以上视频压缩 - */ - private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { - Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); - String outputVideoFile = FileUtils.getOutputVideoFile(); - int width, height, bitrate; - if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 - width = LocaleConstant.DEFAULT_WIDTH / 2; - height = LocaleConstant.DEFAULT_HEIGHT / 2; - } else { - width = LocaleConstant.DEFAULT_HEIGHT / 2; - height = LocaleConstant.DEFAULT_WIDTH / 2; - } - if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { - bitrate = LocaleConstant.BITRATE; - } else { - bitrate = Integer.parseInt(defaultBitrate) / 2; - } - VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { - @Override - public void onStart() { - progressDialog.show(); - } - - @Override - public void onProgress(float percent) { - progressDialog.setProgress((int) percent); - } - - @Override - public void onFinish(boolean result) { - if (result) { - uploadViewModel.uploadVideo(new File(outputVideoFile)); - } else { - StringHub.show(CommonCaseUploadActivity.this, "请先选择案卷类型"); - } - progressDialog.dismiss(); - } - }); - } - - /** - * 首次进入页面显示引导Popup - */ - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (isFirstEnter) { - TextView textView = new TextView(this); - int padding = QMUIDisplayHelper.dp2px(this, 10); - textView.setPadding(padding, padding, padding, padding); - textView.setGravity(Gravity.CENTER); - textView.setText("按住即可开始录音"); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(textView) - .shadow(true) - .arrow(true) - .animStyle(QMUIPopup.ANIM_AUTO) - .dimAmount(0.6f)//60%透明度 - .onDismiss(null) - .show(viewBinding.recodeAudioButton); - isFirstEnter = false; - } - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "2", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java new file mode 100644 index 0000000..c2a889b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java @@ -0,0 +1,635 @@ +package com.casic.dcms.view.upload; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCommonCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; +import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.zolad.videoslimmer.VideoSlimmer; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class CommonCaseActivity extends AndroidxBaseActivity { + + private static final String TAG = "CommonCaseActivity"; + private final Context context = CommonCaseActivity.this; + private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private ProgressDialog progressDialog; + private EditableImageAdapter imageAdapter; + private AudioRecodeHelper audioRecodeHelper; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + private String audioUrl, videoUrl; + private boolean isFirstEnter = true; + + private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("视频压缩中..."); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); + progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); + + /** + * 计算 +图标 大小 + * + * CarrView水平外边距5dp + * RelativeLayout水平内边距10dp + * RecyclerView左边距100dp + * */ + int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); + int margins = FloatHub.dp2px(this, 3); + int itemSize = (realWidth - 4 * margins) / 3; + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); + params.setMargins(margins, margins, margins, margins); + params.gravity = Gravity.LEFT; + viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); + viewBinding.addVideoView.setLayoutParams(params); + + //图片九宫格 + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + uploadCaseLauncher.launch(intent); + } + }); + + /** + * 案卷录音 + * */ + AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { + @Override + public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { + viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); + audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseActivity.this).toString()); + break; + case MotionEvent.ACTION_UP: + audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) + window.dismiss(); + viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); + break; + } + return true; + } + }); + + audioRecodeHelper = new AudioRecodeHelper(); + audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { + @Override + public void onUpdate(double db, long time) { + imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); + textView.setText(LongHub.millsToTime(time)); + } + + @Override + public void onStop(String filePath) { + uploadViewModel.uploadAudio(new File(filePath)); + } + }); + } + }); + + /** + * 案卷视频 + * */ + viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PictureSelectorHelper.takeVideo(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + LocalMedia media = result.get(0); + //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" + //需要手动压缩视频 + String mediaRealPath = media.getRealPath(); + if (TextUtils.isEmpty(mediaRealPath)) { + //部分手机getRealPath可能为空,需要备用路径 + mediaRealPath = media.getPath(); + } + if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { + //如果默认和备用路径还是为空,则不压缩上传 + StringHub.show(context, "请先选择案卷类型"); + return; + } + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(mediaRealPath); + String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); + + assert defaultRotation != null; + compressVideo(mediaRealPath, defaultRotation, defaultBitrate); + } + }); + } + }); + + /** + * 重拍视频 + * */ + viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (viewBinding.videoPlayerView.isShown()) { + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("确定重新拍摄视频材料?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + viewBinding.videoPlayerView.setVisibility(View.GONE); + viewBinding.addVideoView.setVisibility(View.VISIBLE); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + } + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.audioModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + audioUrl = resultBean.getData(); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + if (!TextUtils.isEmpty(audioUrl)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); + } + } + } + }); + uploadViewModel.videoModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 + viewBinding.addVideoView.setVisibility(View.GONE); + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + videoUrl = resultBean.getData(); + String completeURL = StringHelper.appendCompleteURL(videoUrl); + viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(completeURL) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 6.0以上视频压缩 + */ + private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { + Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); + String outputVideoFile = FileUtils.getOutputVideoFile(); + int width, height, bitrate; + if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 + width = LocaleConstant.DEFAULT_WIDTH / 2; + height = LocaleConstant.DEFAULT_HEIGHT / 2; + } else { + width = LocaleConstant.DEFAULT_HEIGHT / 2; + height = LocaleConstant.DEFAULT_WIDTH / 2; + } + if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { + bitrate = LocaleConstant.BITRATE; + } else { + bitrate = Integer.parseInt(defaultBitrate) / 2; + } + VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { + @Override + public void onStart() { + progressDialog.show(); + } + + @Override + public void onProgress(float percent) { + progressDialog.setProgress((int) percent); + } + + @Override + public void onFinish(boolean result) { + if (result) { + uploadViewModel.uploadVideo(new File(outputVideoFile)); + } else { + StringHub.show(CommonCaseActivity.this, "请先选择案卷类型"); + } + progressDialog.dismiss(); + } + }); + } + + /** + * 首次进入页面显示引导Popup + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (isFirstEnter) { + TextView textView = new TextView(this); + int padding = QMUIDisplayHelper.dp2px(this, 10); + textView.setPadding(padding, padding, padding, padding); + textView.setGravity(Gravity.CENTER); + textView.setText("按住即可开始录音"); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(textView) + .shadow(true) + .arrow(true) + .animStyle(QMUIPopup.ANIM_AUTO) + .dimAmount(0.6f)//60%透明度 + .onDismiss(null) + .show(viewBinding.recodeAudioButton); + isFirstEnter = false; + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "2", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java deleted file mode 100644 index 9b96c13..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.media.MediaMetadataRetriever; -import android.text.TextUtils; -import android.util.Log; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadCommonCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.FileUtils; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.FloatHub; -import com.pengxh.androidx.lite.hub.LongHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; -import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; -import com.zolad.videoslimmer.VideoSlimmer; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CommonCaseUploadActivity extends AndroidxBaseActivity { - - private static final String TAG = "CaseUploadActivity"; - private final Context context = CommonCaseUploadActivity.this; - private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private ProgressDialog progressDialog; - private EditableImageAdapter imageAdapter; - private AudioRecodeHelper audioRecodeHelper; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - private String audioUrl, videoUrl; - private boolean isFirstEnter = true; - - private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - progressDialog = new ProgressDialog(this); - progressDialog.setMessage("视频压缩中..."); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); - progressDialog.setCancelable(false); - progressDialog.setCanceledOnTouchOutside(false); - - /** - * 计算 +图标 大小 - * - * CarrView水平外边距5dp - * RelativeLayout水平内边距10dp - * RecyclerView左边距100dp - * */ - int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); - int margins = FloatHub.dp2px(this, 3); - int itemSize = (realWidth - 4 * margins) / 3; - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); - params.setMargins(margins, margins, margins, margins); - params.gravity = Gravity.LEFT; - viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); - viewBinding.addVideoView.setLayoutParams(params); - - //图片九宫格 - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - uploadCaseLauncher.launch(intent); - } - }); - - /** - * 案卷录音 - * */ - AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { - @Override - public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { - viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); - window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); - audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseUploadActivity.this).toString()); - break; - case MotionEvent.ACTION_UP: - audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) - window.dismiss(); - viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); - break; - } - return true; - } - }); - - audioRecodeHelper = new AudioRecodeHelper(); - audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { - @Override - public void onUpdate(double db, long time) { - imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); - textView.setText(LongHub.millsToTime(time)); - } - - @Override - public void onStop(String filePath) { - uploadViewModel.uploadAudio(new File(filePath)); - } - }); - } - }); - - /** - * 案卷视频 - * */ - viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PictureSelectorHelper.takeVideo(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - LocalMedia media = result.get(0); - //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" - //需要手动压缩视频 - String mediaRealPath = media.getRealPath(); - if (TextUtils.isEmpty(mediaRealPath)) { - //部分手机getRealPath可能为空,需要备用路径 - mediaRealPath = media.getPath(); - } - if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { - //如果默认和备用路径还是为空,则不压缩上传 - StringHub.show(context, "请先选择案卷类型"); - return; - } - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(mediaRealPath); - String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); - String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); - - assert defaultRotation != null; - compressVideo(mediaRealPath, defaultRotation, defaultBitrate); - } - }); - } - }); - - /** - * 重拍视频 - * */ - viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (viewBinding.videoPlayerView.isShown()) { - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("确定重新拍摄视频材料?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - viewBinding.videoPlayerView.setVisibility(View.GONE); - viewBinding.addVideoView.setVisibility(View.VISIBLE); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - } - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.audioModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - audioUrl = resultBean.getData(); - /** - * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a - * */ - if (!TextUtils.isEmpty(audioUrl)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); - } - } - } - }); - uploadViewModel.videoModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 - viewBinding.addVideoView.setVisibility(View.GONE); - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - videoUrl = resultBean.getData(); - String completeURL = StringHelper.appendCompleteURL(videoUrl); - viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(completeURL) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 6.0以上视频压缩 - */ - private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { - Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); - String outputVideoFile = FileUtils.getOutputVideoFile(); - int width, height, bitrate; - if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 - width = LocaleConstant.DEFAULT_WIDTH / 2; - height = LocaleConstant.DEFAULT_HEIGHT / 2; - } else { - width = LocaleConstant.DEFAULT_HEIGHT / 2; - height = LocaleConstant.DEFAULT_WIDTH / 2; - } - if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { - bitrate = LocaleConstant.BITRATE; - } else { - bitrate = Integer.parseInt(defaultBitrate) / 2; - } - VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { - @Override - public void onStart() { - progressDialog.show(); - } - - @Override - public void onProgress(float percent) { - progressDialog.setProgress((int) percent); - } - - @Override - public void onFinish(boolean result) { - if (result) { - uploadViewModel.uploadVideo(new File(outputVideoFile)); - } else { - StringHub.show(CommonCaseUploadActivity.this, "请先选择案卷类型"); - } - progressDialog.dismiss(); - } - }); - } - - /** - * 首次进入页面显示引导Popup - */ - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (isFirstEnter) { - TextView textView = new TextView(this); - int padding = QMUIDisplayHelper.dp2px(this, 10); - textView.setPadding(padding, padding, padding, padding); - textView.setGravity(Gravity.CENTER); - textView.setText("按住即可开始录音"); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(textView) - .shadow(true) - .arrow(true) - .animStyle(QMUIPopup.ANIM_AUTO) - .dimAmount(0.6f)//60%透明度 - .onDismiss(null) - .show(viewBinding.recodeAudioButton); - isFirstEnter = false; - } - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "2", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java deleted file mode 100644 index bec9609..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java +++ /dev/null @@ -1,225 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadPackageCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class PackageCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = PackageCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private UploadViewModel uploadViewModel; - private CaseViewModel caseViewModel; - private EditableImageAdapter imageAdapter; - private String gridId, shopID; - - private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String shopName = data.getStringExtra("shopName"); - shopID = data.getStringExtra("shopID"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - viewBinding.shopView.setText(shopName); - viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("三包上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", "三包上报"); - packageCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(shopKeeper)) { - StringHub.show(this, "店主名还未填写"); - return; - } - String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(phoneNumber)) { - StringHub.show(this, "电话号码还未填写"); - return; - } - if (StringHub.isPhoneNumber(phoneNumber)) { - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitShopCase("0", "0", longitude, latitude, - "2", "1", - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), - 0, 0, shopID, shopKeeper, phoneNumber); - } else { - StringHub.show(this, "电话号码格式不对"); - } - } -} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java new file mode 100644 index 0000000..c2a889b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java @@ -0,0 +1,635 @@ +package com.casic.dcms.view.upload; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCommonCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; +import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.zolad.videoslimmer.VideoSlimmer; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class CommonCaseActivity extends AndroidxBaseActivity { + + private static final String TAG = "CommonCaseActivity"; + private final Context context = CommonCaseActivity.this; + private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private ProgressDialog progressDialog; + private EditableImageAdapter imageAdapter; + private AudioRecodeHelper audioRecodeHelper; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + private String audioUrl, videoUrl; + private boolean isFirstEnter = true; + + private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("视频压缩中..."); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); + progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); + + /** + * 计算 +图标 大小 + * + * CarrView水平外边距5dp + * RelativeLayout水平内边距10dp + * RecyclerView左边距100dp + * */ + int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); + int margins = FloatHub.dp2px(this, 3); + int itemSize = (realWidth - 4 * margins) / 3; + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); + params.setMargins(margins, margins, margins, margins); + params.gravity = Gravity.LEFT; + viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); + viewBinding.addVideoView.setLayoutParams(params); + + //图片九宫格 + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + uploadCaseLauncher.launch(intent); + } + }); + + /** + * 案卷录音 + * */ + AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { + @Override + public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { + viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); + audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseActivity.this).toString()); + break; + case MotionEvent.ACTION_UP: + audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) + window.dismiss(); + viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); + break; + } + return true; + } + }); + + audioRecodeHelper = new AudioRecodeHelper(); + audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { + @Override + public void onUpdate(double db, long time) { + imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); + textView.setText(LongHub.millsToTime(time)); + } + + @Override + public void onStop(String filePath) { + uploadViewModel.uploadAudio(new File(filePath)); + } + }); + } + }); + + /** + * 案卷视频 + * */ + viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PictureSelectorHelper.takeVideo(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + LocalMedia media = result.get(0); + //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" + //需要手动压缩视频 + String mediaRealPath = media.getRealPath(); + if (TextUtils.isEmpty(mediaRealPath)) { + //部分手机getRealPath可能为空,需要备用路径 + mediaRealPath = media.getPath(); + } + if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { + //如果默认和备用路径还是为空,则不压缩上传 + StringHub.show(context, "请先选择案卷类型"); + return; + } + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(mediaRealPath); + String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); + + assert defaultRotation != null; + compressVideo(mediaRealPath, defaultRotation, defaultBitrate); + } + }); + } + }); + + /** + * 重拍视频 + * */ + viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (viewBinding.videoPlayerView.isShown()) { + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("确定重新拍摄视频材料?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + viewBinding.videoPlayerView.setVisibility(View.GONE); + viewBinding.addVideoView.setVisibility(View.VISIBLE); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + } + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.audioModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + audioUrl = resultBean.getData(); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + if (!TextUtils.isEmpty(audioUrl)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); + } + } + } + }); + uploadViewModel.videoModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 + viewBinding.addVideoView.setVisibility(View.GONE); + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + videoUrl = resultBean.getData(); + String completeURL = StringHelper.appendCompleteURL(videoUrl); + viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(completeURL) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 6.0以上视频压缩 + */ + private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { + Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); + String outputVideoFile = FileUtils.getOutputVideoFile(); + int width, height, bitrate; + if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 + width = LocaleConstant.DEFAULT_WIDTH / 2; + height = LocaleConstant.DEFAULT_HEIGHT / 2; + } else { + width = LocaleConstant.DEFAULT_HEIGHT / 2; + height = LocaleConstant.DEFAULT_WIDTH / 2; + } + if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { + bitrate = LocaleConstant.BITRATE; + } else { + bitrate = Integer.parseInt(defaultBitrate) / 2; + } + VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { + @Override + public void onStart() { + progressDialog.show(); + } + + @Override + public void onProgress(float percent) { + progressDialog.setProgress((int) percent); + } + + @Override + public void onFinish(boolean result) { + if (result) { + uploadViewModel.uploadVideo(new File(outputVideoFile)); + } else { + StringHub.show(CommonCaseActivity.this, "请先选择案卷类型"); + } + progressDialog.dismiss(); + } + }); + } + + /** + * 首次进入页面显示引导Popup + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (isFirstEnter) { + TextView textView = new TextView(this); + int padding = QMUIDisplayHelper.dp2px(this, 10); + textView.setPadding(padding, padding, padding, padding); + textView.setGravity(Gravity.CENTER); + textView.setText("按住即可开始录音"); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(textView) + .shadow(true) + .arrow(true) + .animStyle(QMUIPopup.ANIM_AUTO) + .dimAmount(0.6f)//60%透明度 + .onDismiss(null) + .show(viewBinding.recodeAudioButton); + isFirstEnter = false; + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "2", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java deleted file mode 100644 index 9b96c13..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.media.MediaMetadataRetriever; -import android.text.TextUtils; -import android.util.Log; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadCommonCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.FileUtils; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.FloatHub; -import com.pengxh.androidx.lite.hub.LongHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; -import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; -import com.zolad.videoslimmer.VideoSlimmer; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CommonCaseUploadActivity extends AndroidxBaseActivity { - - private static final String TAG = "CaseUploadActivity"; - private final Context context = CommonCaseUploadActivity.this; - private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private ProgressDialog progressDialog; - private EditableImageAdapter imageAdapter; - private AudioRecodeHelper audioRecodeHelper; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - private String audioUrl, videoUrl; - private boolean isFirstEnter = true; - - private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - progressDialog = new ProgressDialog(this); - progressDialog.setMessage("视频压缩中..."); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); - progressDialog.setCancelable(false); - progressDialog.setCanceledOnTouchOutside(false); - - /** - * 计算 +图标 大小 - * - * CarrView水平外边距5dp - * RelativeLayout水平内边距10dp - * RecyclerView左边距100dp - * */ - int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); - int margins = FloatHub.dp2px(this, 3); - int itemSize = (realWidth - 4 * margins) / 3; - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); - params.setMargins(margins, margins, margins, margins); - params.gravity = Gravity.LEFT; - viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); - viewBinding.addVideoView.setLayoutParams(params); - - //图片九宫格 - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - uploadCaseLauncher.launch(intent); - } - }); - - /** - * 案卷录音 - * */ - AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { - @Override - public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { - viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); - window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); - audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseUploadActivity.this).toString()); - break; - case MotionEvent.ACTION_UP: - audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) - window.dismiss(); - viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); - break; - } - return true; - } - }); - - audioRecodeHelper = new AudioRecodeHelper(); - audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { - @Override - public void onUpdate(double db, long time) { - imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); - textView.setText(LongHub.millsToTime(time)); - } - - @Override - public void onStop(String filePath) { - uploadViewModel.uploadAudio(new File(filePath)); - } - }); - } - }); - - /** - * 案卷视频 - * */ - viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PictureSelectorHelper.takeVideo(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - LocalMedia media = result.get(0); - //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" - //需要手动压缩视频 - String mediaRealPath = media.getRealPath(); - if (TextUtils.isEmpty(mediaRealPath)) { - //部分手机getRealPath可能为空,需要备用路径 - mediaRealPath = media.getPath(); - } - if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { - //如果默认和备用路径还是为空,则不压缩上传 - StringHub.show(context, "请先选择案卷类型"); - return; - } - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(mediaRealPath); - String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); - String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); - - assert defaultRotation != null; - compressVideo(mediaRealPath, defaultRotation, defaultBitrate); - } - }); - } - }); - - /** - * 重拍视频 - * */ - viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (viewBinding.videoPlayerView.isShown()) { - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("确定重新拍摄视频材料?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - viewBinding.videoPlayerView.setVisibility(View.GONE); - viewBinding.addVideoView.setVisibility(View.VISIBLE); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - } - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.audioModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - audioUrl = resultBean.getData(); - /** - * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a - * */ - if (!TextUtils.isEmpty(audioUrl)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); - } - } - } - }); - uploadViewModel.videoModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 - viewBinding.addVideoView.setVisibility(View.GONE); - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - videoUrl = resultBean.getData(); - String completeURL = StringHelper.appendCompleteURL(videoUrl); - viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(completeURL) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 6.0以上视频压缩 - */ - private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { - Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); - String outputVideoFile = FileUtils.getOutputVideoFile(); - int width, height, bitrate; - if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 - width = LocaleConstant.DEFAULT_WIDTH / 2; - height = LocaleConstant.DEFAULT_HEIGHT / 2; - } else { - width = LocaleConstant.DEFAULT_HEIGHT / 2; - height = LocaleConstant.DEFAULT_WIDTH / 2; - } - if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { - bitrate = LocaleConstant.BITRATE; - } else { - bitrate = Integer.parseInt(defaultBitrate) / 2; - } - VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { - @Override - public void onStart() { - progressDialog.show(); - } - - @Override - public void onProgress(float percent) { - progressDialog.setProgress((int) percent); - } - - @Override - public void onFinish(boolean result) { - if (result) { - uploadViewModel.uploadVideo(new File(outputVideoFile)); - } else { - StringHub.show(CommonCaseUploadActivity.this, "请先选择案卷类型"); - } - progressDialog.dismiss(); - } - }); - } - - /** - * 首次进入页面显示引导Popup - */ - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (isFirstEnter) { - TextView textView = new TextView(this); - int padding = QMUIDisplayHelper.dp2px(this, 10); - textView.setPadding(padding, padding, padding, padding); - textView.setGravity(Gravity.CENTER); - textView.setText("按住即可开始录音"); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(textView) - .shadow(true) - .arrow(true) - .animStyle(QMUIPopup.ANIM_AUTO) - .dimAmount(0.6f)//60%透明度 - .onDismiss(null) - .show(viewBinding.recodeAudioButton); - isFirstEnter = false; - } - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "2", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java deleted file mode 100644 index bec9609..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java +++ /dev/null @@ -1,225 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadPackageCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class PackageCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = PackageCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private UploadViewModel uploadViewModel; - private CaseViewModel caseViewModel; - private EditableImageAdapter imageAdapter; - private String gridId, shopID; - - private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String shopName = data.getStringExtra("shopName"); - shopID = data.getStringExtra("shopID"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - viewBinding.shopView.setText(shopName); - viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("三包上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", "三包上报"); - packageCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(shopKeeper)) { - StringHub.show(this, "店主名还未填写"); - return; - } - String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(phoneNumber)) { - StringHub.show(this, "电话号码还未填写"); - return; - } - if (StringHub.isPhoneNumber(phoneNumber)) { - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitShopCase("0", "0", longitude, latitude, - "2", "1", - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), - 0, 0, shopID, shopKeeper, phoneNumber); - } else { - StringHub.show(this, "电话号码格式不对"); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java deleted file mode 100644 index a75b868..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java +++ /dev/null @@ -1,361 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadQuickCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class QuickCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = QuickCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真是图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private EditableImageAdapter imageAdapter; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - - private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("快速上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //根据情况加载不同图层 - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - quickCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), "", "", 0, 0); - } -} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java new file mode 100644 index 0000000..c2a889b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java @@ -0,0 +1,635 @@ +package com.casic.dcms.view.upload; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCommonCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; +import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.zolad.videoslimmer.VideoSlimmer; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class CommonCaseActivity extends AndroidxBaseActivity { + + private static final String TAG = "CommonCaseActivity"; + private final Context context = CommonCaseActivity.this; + private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private ProgressDialog progressDialog; + private EditableImageAdapter imageAdapter; + private AudioRecodeHelper audioRecodeHelper; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + private String audioUrl, videoUrl; + private boolean isFirstEnter = true; + + private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("视频压缩中..."); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); + progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); + + /** + * 计算 +图标 大小 + * + * CarrView水平外边距5dp + * RelativeLayout水平内边距10dp + * RecyclerView左边距100dp + * */ + int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); + int margins = FloatHub.dp2px(this, 3); + int itemSize = (realWidth - 4 * margins) / 3; + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); + params.setMargins(margins, margins, margins, margins); + params.gravity = Gravity.LEFT; + viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); + viewBinding.addVideoView.setLayoutParams(params); + + //图片九宫格 + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + uploadCaseLauncher.launch(intent); + } + }); + + /** + * 案卷录音 + * */ + AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { + @Override + public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { + viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); + audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseActivity.this).toString()); + break; + case MotionEvent.ACTION_UP: + audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) + window.dismiss(); + viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); + break; + } + return true; + } + }); + + audioRecodeHelper = new AudioRecodeHelper(); + audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { + @Override + public void onUpdate(double db, long time) { + imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); + textView.setText(LongHub.millsToTime(time)); + } + + @Override + public void onStop(String filePath) { + uploadViewModel.uploadAudio(new File(filePath)); + } + }); + } + }); + + /** + * 案卷视频 + * */ + viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PictureSelectorHelper.takeVideo(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + LocalMedia media = result.get(0); + //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" + //需要手动压缩视频 + String mediaRealPath = media.getRealPath(); + if (TextUtils.isEmpty(mediaRealPath)) { + //部分手机getRealPath可能为空,需要备用路径 + mediaRealPath = media.getPath(); + } + if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { + //如果默认和备用路径还是为空,则不压缩上传 + StringHub.show(context, "请先选择案卷类型"); + return; + } + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(mediaRealPath); + String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); + + assert defaultRotation != null; + compressVideo(mediaRealPath, defaultRotation, defaultBitrate); + } + }); + } + }); + + /** + * 重拍视频 + * */ + viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (viewBinding.videoPlayerView.isShown()) { + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("确定重新拍摄视频材料?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + viewBinding.videoPlayerView.setVisibility(View.GONE); + viewBinding.addVideoView.setVisibility(View.VISIBLE); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + } + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.audioModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + audioUrl = resultBean.getData(); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + if (!TextUtils.isEmpty(audioUrl)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); + } + } + } + }); + uploadViewModel.videoModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 + viewBinding.addVideoView.setVisibility(View.GONE); + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + videoUrl = resultBean.getData(); + String completeURL = StringHelper.appendCompleteURL(videoUrl); + viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(completeURL) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 6.0以上视频压缩 + */ + private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { + Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); + String outputVideoFile = FileUtils.getOutputVideoFile(); + int width, height, bitrate; + if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 + width = LocaleConstant.DEFAULT_WIDTH / 2; + height = LocaleConstant.DEFAULT_HEIGHT / 2; + } else { + width = LocaleConstant.DEFAULT_HEIGHT / 2; + height = LocaleConstant.DEFAULT_WIDTH / 2; + } + if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { + bitrate = LocaleConstant.BITRATE; + } else { + bitrate = Integer.parseInt(defaultBitrate) / 2; + } + VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { + @Override + public void onStart() { + progressDialog.show(); + } + + @Override + public void onProgress(float percent) { + progressDialog.setProgress((int) percent); + } + + @Override + public void onFinish(boolean result) { + if (result) { + uploadViewModel.uploadVideo(new File(outputVideoFile)); + } else { + StringHub.show(CommonCaseActivity.this, "请先选择案卷类型"); + } + progressDialog.dismiss(); + } + }); + } + + /** + * 首次进入页面显示引导Popup + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (isFirstEnter) { + TextView textView = new TextView(this); + int padding = QMUIDisplayHelper.dp2px(this, 10); + textView.setPadding(padding, padding, padding, padding); + textView.setGravity(Gravity.CENTER); + textView.setText("按住即可开始录音"); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(textView) + .shadow(true) + .arrow(true) + .animStyle(QMUIPopup.ANIM_AUTO) + .dimAmount(0.6f)//60%透明度 + .onDismiss(null) + .show(viewBinding.recodeAudioButton); + isFirstEnter = false; + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "2", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java deleted file mode 100644 index 9b96c13..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.media.MediaMetadataRetriever; -import android.text.TextUtils; -import android.util.Log; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadCommonCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.FileUtils; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.FloatHub; -import com.pengxh.androidx.lite.hub.LongHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; -import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; -import com.zolad.videoslimmer.VideoSlimmer; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CommonCaseUploadActivity extends AndroidxBaseActivity { - - private static final String TAG = "CaseUploadActivity"; - private final Context context = CommonCaseUploadActivity.this; - private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private ProgressDialog progressDialog; - private EditableImageAdapter imageAdapter; - private AudioRecodeHelper audioRecodeHelper; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - private String audioUrl, videoUrl; - private boolean isFirstEnter = true; - - private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - progressDialog = new ProgressDialog(this); - progressDialog.setMessage("视频压缩中..."); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); - progressDialog.setCancelable(false); - progressDialog.setCanceledOnTouchOutside(false); - - /** - * 计算 +图标 大小 - * - * CarrView水平外边距5dp - * RelativeLayout水平内边距10dp - * RecyclerView左边距100dp - * */ - int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); - int margins = FloatHub.dp2px(this, 3); - int itemSize = (realWidth - 4 * margins) / 3; - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); - params.setMargins(margins, margins, margins, margins); - params.gravity = Gravity.LEFT; - viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); - viewBinding.addVideoView.setLayoutParams(params); - - //图片九宫格 - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - uploadCaseLauncher.launch(intent); - } - }); - - /** - * 案卷录音 - * */ - AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { - @Override - public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { - viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); - window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); - audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseUploadActivity.this).toString()); - break; - case MotionEvent.ACTION_UP: - audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) - window.dismiss(); - viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); - break; - } - return true; - } - }); - - audioRecodeHelper = new AudioRecodeHelper(); - audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { - @Override - public void onUpdate(double db, long time) { - imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); - textView.setText(LongHub.millsToTime(time)); - } - - @Override - public void onStop(String filePath) { - uploadViewModel.uploadAudio(new File(filePath)); - } - }); - } - }); - - /** - * 案卷视频 - * */ - viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PictureSelectorHelper.takeVideo(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - LocalMedia media = result.get(0); - //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" - //需要手动压缩视频 - String mediaRealPath = media.getRealPath(); - if (TextUtils.isEmpty(mediaRealPath)) { - //部分手机getRealPath可能为空,需要备用路径 - mediaRealPath = media.getPath(); - } - if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { - //如果默认和备用路径还是为空,则不压缩上传 - StringHub.show(context, "请先选择案卷类型"); - return; - } - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(mediaRealPath); - String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); - String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); - - assert defaultRotation != null; - compressVideo(mediaRealPath, defaultRotation, defaultBitrate); - } - }); - } - }); - - /** - * 重拍视频 - * */ - viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (viewBinding.videoPlayerView.isShown()) { - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("确定重新拍摄视频材料?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - viewBinding.videoPlayerView.setVisibility(View.GONE); - viewBinding.addVideoView.setVisibility(View.VISIBLE); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - } - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.audioModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - audioUrl = resultBean.getData(); - /** - * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a - * */ - if (!TextUtils.isEmpty(audioUrl)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); - } - } - } - }); - uploadViewModel.videoModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 - viewBinding.addVideoView.setVisibility(View.GONE); - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - videoUrl = resultBean.getData(); - String completeURL = StringHelper.appendCompleteURL(videoUrl); - viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(completeURL) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 6.0以上视频压缩 - */ - private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { - Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); - String outputVideoFile = FileUtils.getOutputVideoFile(); - int width, height, bitrate; - if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 - width = LocaleConstant.DEFAULT_WIDTH / 2; - height = LocaleConstant.DEFAULT_HEIGHT / 2; - } else { - width = LocaleConstant.DEFAULT_HEIGHT / 2; - height = LocaleConstant.DEFAULT_WIDTH / 2; - } - if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { - bitrate = LocaleConstant.BITRATE; - } else { - bitrate = Integer.parseInt(defaultBitrate) / 2; - } - VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { - @Override - public void onStart() { - progressDialog.show(); - } - - @Override - public void onProgress(float percent) { - progressDialog.setProgress((int) percent); - } - - @Override - public void onFinish(boolean result) { - if (result) { - uploadViewModel.uploadVideo(new File(outputVideoFile)); - } else { - StringHub.show(CommonCaseUploadActivity.this, "请先选择案卷类型"); - } - progressDialog.dismiss(); - } - }); - } - - /** - * 首次进入页面显示引导Popup - */ - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (isFirstEnter) { - TextView textView = new TextView(this); - int padding = QMUIDisplayHelper.dp2px(this, 10); - textView.setPadding(padding, padding, padding, padding); - textView.setGravity(Gravity.CENTER); - textView.setText("按住即可开始录音"); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(textView) - .shadow(true) - .arrow(true) - .animStyle(QMUIPopup.ANIM_AUTO) - .dimAmount(0.6f)//60%透明度 - .onDismiss(null) - .show(viewBinding.recodeAudioButton); - isFirstEnter = false; - } - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "2", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java deleted file mode 100644 index bec9609..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java +++ /dev/null @@ -1,225 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadPackageCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class PackageCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = PackageCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private UploadViewModel uploadViewModel; - private CaseViewModel caseViewModel; - private EditableImageAdapter imageAdapter; - private String gridId, shopID; - - private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String shopName = data.getStringExtra("shopName"); - shopID = data.getStringExtra("shopID"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - viewBinding.shopView.setText(shopName); - viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("三包上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", "三包上报"); - packageCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(shopKeeper)) { - StringHub.show(this, "店主名还未填写"); - return; - } - String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(phoneNumber)) { - StringHub.show(this, "电话号码还未填写"); - return; - } - if (StringHub.isPhoneNumber(phoneNumber)) { - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitShopCase("0", "0", longitude, latitude, - "2", "1", - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), - 0, 0, shopID, shopKeeper, phoneNumber); - } else { - StringHub.show(this, "电话号码格式不对"); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java deleted file mode 100644 index a75b868..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java +++ /dev/null @@ -1,361 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadQuickCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class QuickCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = QuickCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真是图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private EditableImageAdapter imageAdapter; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - - private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("快速上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //根据情况加载不同图层 - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - quickCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), "", "", 0, 0); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java deleted file mode 100644 index b680e8f..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.content.Context; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifiedDetailBinding; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.util.ArrayList; - -import cn.jzvd.Jzvd; - -public class CaseVerifiedDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifiedDetailActivity.this; - private CaseViewModel caseViewModel; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷详情"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String id = getIntent().getStringExtra(Constant.INTENT_PARAM); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - caseViewModel.obtainCaseDetail(id); - } - - @Override - protected void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //图片 - String verifyImages = data.getFileIdVerify(); - if (!TextUtils.isEmpty(verifyImages)) { - ArrayList urls = new ArrayList<>(); - String[] split = verifyImages.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int position, long l) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp( - videoUrl, - StringHub.filterSpaceOrEnter(data.getDescription()), - Jzvd.SCREEN_NORMAL - ); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - }); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - public void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java new file mode 100644 index 0000000..c2a889b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java @@ -0,0 +1,635 @@ +package com.casic.dcms.view.upload; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCommonCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; +import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.zolad.videoslimmer.VideoSlimmer; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class CommonCaseActivity extends AndroidxBaseActivity { + + private static final String TAG = "CommonCaseActivity"; + private final Context context = CommonCaseActivity.this; + private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private ProgressDialog progressDialog; + private EditableImageAdapter imageAdapter; + private AudioRecodeHelper audioRecodeHelper; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + private String audioUrl, videoUrl; + private boolean isFirstEnter = true; + + private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("视频压缩中..."); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); + progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); + + /** + * 计算 +图标 大小 + * + * CarrView水平外边距5dp + * RelativeLayout水平内边距10dp + * RecyclerView左边距100dp + * */ + int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); + int margins = FloatHub.dp2px(this, 3); + int itemSize = (realWidth - 4 * margins) / 3; + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); + params.setMargins(margins, margins, margins, margins); + params.gravity = Gravity.LEFT; + viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); + viewBinding.addVideoView.setLayoutParams(params); + + //图片九宫格 + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + uploadCaseLauncher.launch(intent); + } + }); + + /** + * 案卷录音 + * */ + AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { + @Override + public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { + viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); + audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseActivity.this).toString()); + break; + case MotionEvent.ACTION_UP: + audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) + window.dismiss(); + viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); + break; + } + return true; + } + }); + + audioRecodeHelper = new AudioRecodeHelper(); + audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { + @Override + public void onUpdate(double db, long time) { + imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); + textView.setText(LongHub.millsToTime(time)); + } + + @Override + public void onStop(String filePath) { + uploadViewModel.uploadAudio(new File(filePath)); + } + }); + } + }); + + /** + * 案卷视频 + * */ + viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PictureSelectorHelper.takeVideo(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + LocalMedia media = result.get(0); + //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" + //需要手动压缩视频 + String mediaRealPath = media.getRealPath(); + if (TextUtils.isEmpty(mediaRealPath)) { + //部分手机getRealPath可能为空,需要备用路径 + mediaRealPath = media.getPath(); + } + if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { + //如果默认和备用路径还是为空,则不压缩上传 + StringHub.show(context, "请先选择案卷类型"); + return; + } + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(mediaRealPath); + String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); + + assert defaultRotation != null; + compressVideo(mediaRealPath, defaultRotation, defaultBitrate); + } + }); + } + }); + + /** + * 重拍视频 + * */ + viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (viewBinding.videoPlayerView.isShown()) { + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("确定重新拍摄视频材料?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + viewBinding.videoPlayerView.setVisibility(View.GONE); + viewBinding.addVideoView.setVisibility(View.VISIBLE); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + } + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.audioModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + audioUrl = resultBean.getData(); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + if (!TextUtils.isEmpty(audioUrl)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); + } + } + } + }); + uploadViewModel.videoModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 + viewBinding.addVideoView.setVisibility(View.GONE); + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + videoUrl = resultBean.getData(); + String completeURL = StringHelper.appendCompleteURL(videoUrl); + viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(completeURL) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 6.0以上视频压缩 + */ + private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { + Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); + String outputVideoFile = FileUtils.getOutputVideoFile(); + int width, height, bitrate; + if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 + width = LocaleConstant.DEFAULT_WIDTH / 2; + height = LocaleConstant.DEFAULT_HEIGHT / 2; + } else { + width = LocaleConstant.DEFAULT_HEIGHT / 2; + height = LocaleConstant.DEFAULT_WIDTH / 2; + } + if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { + bitrate = LocaleConstant.BITRATE; + } else { + bitrate = Integer.parseInt(defaultBitrate) / 2; + } + VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { + @Override + public void onStart() { + progressDialog.show(); + } + + @Override + public void onProgress(float percent) { + progressDialog.setProgress((int) percent); + } + + @Override + public void onFinish(boolean result) { + if (result) { + uploadViewModel.uploadVideo(new File(outputVideoFile)); + } else { + StringHub.show(CommonCaseActivity.this, "请先选择案卷类型"); + } + progressDialog.dismiss(); + } + }); + } + + /** + * 首次进入页面显示引导Popup + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (isFirstEnter) { + TextView textView = new TextView(this); + int padding = QMUIDisplayHelper.dp2px(this, 10); + textView.setPadding(padding, padding, padding, padding); + textView.setGravity(Gravity.CENTER); + textView.setText("按住即可开始录音"); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(textView) + .shadow(true) + .arrow(true) + .animStyle(QMUIPopup.ANIM_AUTO) + .dimAmount(0.6f)//60%透明度 + .onDismiss(null) + .show(viewBinding.recodeAudioButton); + isFirstEnter = false; + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "2", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java deleted file mode 100644 index 9b96c13..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.media.MediaMetadataRetriever; -import android.text.TextUtils; -import android.util.Log; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadCommonCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.FileUtils; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.FloatHub; -import com.pengxh.androidx.lite.hub.LongHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; -import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; -import com.zolad.videoslimmer.VideoSlimmer; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CommonCaseUploadActivity extends AndroidxBaseActivity { - - private static final String TAG = "CaseUploadActivity"; - private final Context context = CommonCaseUploadActivity.this; - private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private ProgressDialog progressDialog; - private EditableImageAdapter imageAdapter; - private AudioRecodeHelper audioRecodeHelper; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - private String audioUrl, videoUrl; - private boolean isFirstEnter = true; - - private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - progressDialog = new ProgressDialog(this); - progressDialog.setMessage("视频压缩中..."); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); - progressDialog.setCancelable(false); - progressDialog.setCanceledOnTouchOutside(false); - - /** - * 计算 +图标 大小 - * - * CarrView水平外边距5dp - * RelativeLayout水平内边距10dp - * RecyclerView左边距100dp - * */ - int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); - int margins = FloatHub.dp2px(this, 3); - int itemSize = (realWidth - 4 * margins) / 3; - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); - params.setMargins(margins, margins, margins, margins); - params.gravity = Gravity.LEFT; - viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); - viewBinding.addVideoView.setLayoutParams(params); - - //图片九宫格 - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - uploadCaseLauncher.launch(intent); - } - }); - - /** - * 案卷录音 - * */ - AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { - @Override - public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { - viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); - window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); - audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseUploadActivity.this).toString()); - break; - case MotionEvent.ACTION_UP: - audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) - window.dismiss(); - viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); - break; - } - return true; - } - }); - - audioRecodeHelper = new AudioRecodeHelper(); - audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { - @Override - public void onUpdate(double db, long time) { - imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); - textView.setText(LongHub.millsToTime(time)); - } - - @Override - public void onStop(String filePath) { - uploadViewModel.uploadAudio(new File(filePath)); - } - }); - } - }); - - /** - * 案卷视频 - * */ - viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PictureSelectorHelper.takeVideo(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - LocalMedia media = result.get(0); - //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" - //需要手动压缩视频 - String mediaRealPath = media.getRealPath(); - if (TextUtils.isEmpty(mediaRealPath)) { - //部分手机getRealPath可能为空,需要备用路径 - mediaRealPath = media.getPath(); - } - if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { - //如果默认和备用路径还是为空,则不压缩上传 - StringHub.show(context, "请先选择案卷类型"); - return; - } - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(mediaRealPath); - String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); - String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); - - assert defaultRotation != null; - compressVideo(mediaRealPath, defaultRotation, defaultBitrate); - } - }); - } - }); - - /** - * 重拍视频 - * */ - viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (viewBinding.videoPlayerView.isShown()) { - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("确定重新拍摄视频材料?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - viewBinding.videoPlayerView.setVisibility(View.GONE); - viewBinding.addVideoView.setVisibility(View.VISIBLE); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - } - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.audioModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - audioUrl = resultBean.getData(); - /** - * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a - * */ - if (!TextUtils.isEmpty(audioUrl)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); - } - } - } - }); - uploadViewModel.videoModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 - viewBinding.addVideoView.setVisibility(View.GONE); - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - videoUrl = resultBean.getData(); - String completeURL = StringHelper.appendCompleteURL(videoUrl); - viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(completeURL) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 6.0以上视频压缩 - */ - private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { - Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); - String outputVideoFile = FileUtils.getOutputVideoFile(); - int width, height, bitrate; - if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 - width = LocaleConstant.DEFAULT_WIDTH / 2; - height = LocaleConstant.DEFAULT_HEIGHT / 2; - } else { - width = LocaleConstant.DEFAULT_HEIGHT / 2; - height = LocaleConstant.DEFAULT_WIDTH / 2; - } - if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { - bitrate = LocaleConstant.BITRATE; - } else { - bitrate = Integer.parseInt(defaultBitrate) / 2; - } - VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { - @Override - public void onStart() { - progressDialog.show(); - } - - @Override - public void onProgress(float percent) { - progressDialog.setProgress((int) percent); - } - - @Override - public void onFinish(boolean result) { - if (result) { - uploadViewModel.uploadVideo(new File(outputVideoFile)); - } else { - StringHub.show(CommonCaseUploadActivity.this, "请先选择案卷类型"); - } - progressDialog.dismiss(); - } - }); - } - - /** - * 首次进入页面显示引导Popup - */ - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (isFirstEnter) { - TextView textView = new TextView(this); - int padding = QMUIDisplayHelper.dp2px(this, 10); - textView.setPadding(padding, padding, padding, padding); - textView.setGravity(Gravity.CENTER); - textView.setText("按住即可开始录音"); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(textView) - .shadow(true) - .arrow(true) - .animStyle(QMUIPopup.ANIM_AUTO) - .dimAmount(0.6f)//60%透明度 - .onDismiss(null) - .show(viewBinding.recodeAudioButton); - isFirstEnter = false; - } - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "2", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java deleted file mode 100644 index bec9609..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java +++ /dev/null @@ -1,225 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadPackageCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class PackageCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = PackageCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private UploadViewModel uploadViewModel; - private CaseViewModel caseViewModel; - private EditableImageAdapter imageAdapter; - private String gridId, shopID; - - private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String shopName = data.getStringExtra("shopName"); - shopID = data.getStringExtra("shopID"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - viewBinding.shopView.setText(shopName); - viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("三包上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", "三包上报"); - packageCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(shopKeeper)) { - StringHub.show(this, "店主名还未填写"); - return; - } - String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(phoneNumber)) { - StringHub.show(this, "电话号码还未填写"); - return; - } - if (StringHub.isPhoneNumber(phoneNumber)) { - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitShopCase("0", "0", longitude, latitude, - "2", "1", - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), - 0, 0, shopID, shopKeeper, phoneNumber); - } else { - StringHub.show(this, "电话号码格式不对"); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java deleted file mode 100644 index a75b868..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java +++ /dev/null @@ -1,361 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadQuickCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class QuickCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = QuickCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真是图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private EditableImageAdapter imageAdapter; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - - private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("快速上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //根据情况加载不同图层 - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - quickCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), "", "", 0, 0); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java deleted file mode 100644 index b680e8f..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.content.Context; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifiedDetailBinding; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.util.ArrayList; - -import cn.jzvd.Jzvd; - -public class CaseVerifiedDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifiedDetailActivity.this; - private CaseViewModel caseViewModel; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷详情"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String id = getIntent().getStringExtra(Constant.INTENT_PARAM); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - caseViewModel.obtainCaseDetail(id); - } - - @Override - protected void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //图片 - String verifyImages = data.getFileIdVerify(); - if (!TextUtils.isEmpty(verifyImages)) { - ArrayList urls = new ArrayList<>(); - String[] split = verifyImages.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int position, long l) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp( - videoUrl, - StringHub.filterSpaceOrEnter(data.getDescription()), - Jzvd.SCREEN_NORMAL - ); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - }); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - public void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java deleted file mode 100644 index 4a8a8ef..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java +++ /dev/null @@ -1,522 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifyDetailBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseNextNodeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseOperateViewModel; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CaseVerifyDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifyDetailActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private NodeViewModel nodeViewModel; - private CaseOperateViewModel operateViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private String id; - private String eorc; - private String typeCode; - private String typeDetailCode; - private String gridId;//可能来自案卷详情,也可能来自地图选点 - private double longitude, latitude; - private String changeState; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private EditableImageAdapter verifyImageAdapter; - - private final ActivityResultLauncher verifyCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - longitude = data.getDoubleExtra("longitude", 0); - latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String casePlace = data.getStringExtra("pos"); - viewBinding.caseCommunityView.setText(community); - if (TextUtils.isEmpty(casePlace)) { - viewBinding.casePlaceView.setText(community); - } else { - viewBinding.casePlaceView.setText(casePlace); - } - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷核实"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - id = getIntent().getStringExtra(Constant.INTENT_PARAM); - - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - nodeViewModel = new ViewModelProvider(this).get(NodeViewModel.class); - operateViewModel = new ViewModelProvider(this).get(CaseOperateViewModel.class); - - caseViewModel.obtainCaseDetail(id); - - verifyImageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(verifyImageAdapter); - } - - @Override - public void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - gridId = data.getGridId(); - String lng = data.getLng(); - if (!TextUtils.isEmpty(lng)) { - longitude = Double.parseDouble(lng); - } - String lat = data.getLat(); - if (!TextUtils.isEmpty(lat)) { - latitude = Double.parseDouble(lat); - } - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getCaseStateName().equals("") ? "无处理意见" : data.getCaseStateName()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //根据source判断是否能够修改案卷类型,11/12是公众号和热线电话,案卷类型可修改;否则不可修改 - int source = data.getSource(); - if (source != 11 && source != 12) { - viewBinding.caseTypeRightImage.setVisibility(View.GONE); - viewBinding.largeTypeRightImage.setVisibility(View.GONE); - viewBinding.smallTypeRightImage.setVisibility(View.GONE); - - viewBinding.caseClassLayout.setClickable(false); - viewBinding.caseLargeClassLayout.setClickable(false); - viewBinding.caseSmallClassLayout.setClickable(false); - } - - //图片 - String images = data.getFileIdVerify(); - if (!TextUtils.isEmpty(images)) { - ArrayList urls = new ArrayList<>(); - String[] split = images.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp(videoUrl, StringHub.filterSpaceOrEnter(data.getDescription()), Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseTypeView.setText(tag); - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() == 0) { - viewBinding.caseLargeTypeView.setText("无小类"); - } else { - viewBinding.caseLargeTypeView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallTypeView.setText("请选择"); - } - } - }); - - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeCode = largeTypeBeans.get(position).getTypeCode(); - - viewBinding.caseLargeTypeView.setText(tag); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - String typeId = dataBean.getId(); - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() == 0) { - viewBinding.caseSmallTypeView.setText("无小类"); - } else { - viewBinding.caseSmallTypeView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - } - } - } - }); - - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - - viewBinding.caseSmallTypeView.setText(tag); - } - }).build().show(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseTypeView.getText().toString(); - if (type.equals("请选择")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - int source = data.getSource(); - if (source == 11 || source == 12) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - verifyCaseLauncher.launch(intent); - } else { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - } - }); - - viewBinding.caseConditionLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - nodeViewModel.obtainNextNode(String.valueOf(data.getCaseState())); - } - }); - nodeViewModel.nodeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseNextNodeBean resultBean) { - if (resultBean.isSuccess()) { - List dataBeans = resultBean.getData(); - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("核实情况"); - for (CaseNextNodeBean.DataBean dataBean : dataBeans) { - sheetBuilder.addItem(dataBean.getNextOperation()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - - CaseNextNodeBean.DataBean dataBean = dataBeans.get(position); - viewBinding.caseConditionView.setText(dataBean.getNextOperation()); - changeState = String.valueOf(dataBean.getNextState()); - } - }).build().show(); - } else { - StringHub.show(context, "该案卷无下级流转节点"); - } - } - }); - - //图片九宫格事件处理 - verifyImageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - verifyImageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.isSuccess()) { - if (verifyImageAdapter.getItemCount() <= 3) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - verifyImageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - operateViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷核实中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "核实失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - private void submitCase() { - String remarks = viewBinding.caseConditionView.getText().toString(); - if (TextUtils.isEmpty(remarks)) { - StringHub.show(this, "核实意见不能为空"); - return; - } - if (TextUtils.isEmpty(changeState)) { - StringHub.show(this, "核实情况还未选择"); - return; - } - int source = data.getSource(); - if (source != 11 && source != 12) { - //修改案卷 - operateViewModel.checkCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList)); - } else { - //补全案卷 - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新选择"); - return; - } - String fieldIntro = viewBinding.casePlaceView.getText().toString(); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - } - if (longitude == 0 || latitude == 0) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - operateViewModel.verifyCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList), - eorc == null ? data.getEorc() : eorc, - typeCode == null ? data.getCasetypeCode() : typeCode, - typeDetailCode == null ? data.getCasetypeDetailCode() : typeDetailCode, - String.valueOf(longitude), String.valueOf(latitude), - "1", gridId.substring(0, 6), - gridId.substring(0, 9), data.getCommunityCode(), gridId, fieldIntro); - } - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java new file mode 100644 index 0000000..c2a889b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java @@ -0,0 +1,635 @@ +package com.casic.dcms.view.upload; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCommonCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; +import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.zolad.videoslimmer.VideoSlimmer; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class CommonCaseActivity extends AndroidxBaseActivity { + + private static final String TAG = "CommonCaseActivity"; + private final Context context = CommonCaseActivity.this; + private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private ProgressDialog progressDialog; + private EditableImageAdapter imageAdapter; + private AudioRecodeHelper audioRecodeHelper; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + private String audioUrl, videoUrl; + private boolean isFirstEnter = true; + + private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("视频压缩中..."); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); + progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); + + /** + * 计算 +图标 大小 + * + * CarrView水平外边距5dp + * RelativeLayout水平内边距10dp + * RecyclerView左边距100dp + * */ + int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); + int margins = FloatHub.dp2px(this, 3); + int itemSize = (realWidth - 4 * margins) / 3; + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); + params.setMargins(margins, margins, margins, margins); + params.gravity = Gravity.LEFT; + viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); + viewBinding.addVideoView.setLayoutParams(params); + + //图片九宫格 + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + uploadCaseLauncher.launch(intent); + } + }); + + /** + * 案卷录音 + * */ + AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { + @Override + public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { + viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); + audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseActivity.this).toString()); + break; + case MotionEvent.ACTION_UP: + audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) + window.dismiss(); + viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); + break; + } + return true; + } + }); + + audioRecodeHelper = new AudioRecodeHelper(); + audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { + @Override + public void onUpdate(double db, long time) { + imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); + textView.setText(LongHub.millsToTime(time)); + } + + @Override + public void onStop(String filePath) { + uploadViewModel.uploadAudio(new File(filePath)); + } + }); + } + }); + + /** + * 案卷视频 + * */ + viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PictureSelectorHelper.takeVideo(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + LocalMedia media = result.get(0); + //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" + //需要手动压缩视频 + String mediaRealPath = media.getRealPath(); + if (TextUtils.isEmpty(mediaRealPath)) { + //部分手机getRealPath可能为空,需要备用路径 + mediaRealPath = media.getPath(); + } + if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { + //如果默认和备用路径还是为空,则不压缩上传 + StringHub.show(context, "请先选择案卷类型"); + return; + } + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(mediaRealPath); + String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); + + assert defaultRotation != null; + compressVideo(mediaRealPath, defaultRotation, defaultBitrate); + } + }); + } + }); + + /** + * 重拍视频 + * */ + viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (viewBinding.videoPlayerView.isShown()) { + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("确定重新拍摄视频材料?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + viewBinding.videoPlayerView.setVisibility(View.GONE); + viewBinding.addVideoView.setVisibility(View.VISIBLE); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + } + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.audioModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + audioUrl = resultBean.getData(); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + if (!TextUtils.isEmpty(audioUrl)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); + } + } + } + }); + uploadViewModel.videoModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 + viewBinding.addVideoView.setVisibility(View.GONE); + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + videoUrl = resultBean.getData(); + String completeURL = StringHelper.appendCompleteURL(videoUrl); + viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(completeURL) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 6.0以上视频压缩 + */ + private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { + Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); + String outputVideoFile = FileUtils.getOutputVideoFile(); + int width, height, bitrate; + if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 + width = LocaleConstant.DEFAULT_WIDTH / 2; + height = LocaleConstant.DEFAULT_HEIGHT / 2; + } else { + width = LocaleConstant.DEFAULT_HEIGHT / 2; + height = LocaleConstant.DEFAULT_WIDTH / 2; + } + if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { + bitrate = LocaleConstant.BITRATE; + } else { + bitrate = Integer.parseInt(defaultBitrate) / 2; + } + VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { + @Override + public void onStart() { + progressDialog.show(); + } + + @Override + public void onProgress(float percent) { + progressDialog.setProgress((int) percent); + } + + @Override + public void onFinish(boolean result) { + if (result) { + uploadViewModel.uploadVideo(new File(outputVideoFile)); + } else { + StringHub.show(CommonCaseActivity.this, "请先选择案卷类型"); + } + progressDialog.dismiss(); + } + }); + } + + /** + * 首次进入页面显示引导Popup + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (isFirstEnter) { + TextView textView = new TextView(this); + int padding = QMUIDisplayHelper.dp2px(this, 10); + textView.setPadding(padding, padding, padding, padding); + textView.setGravity(Gravity.CENTER); + textView.setText("按住即可开始录音"); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(textView) + .shadow(true) + .arrow(true) + .animStyle(QMUIPopup.ANIM_AUTO) + .dimAmount(0.6f)//60%透明度 + .onDismiss(null) + .show(viewBinding.recodeAudioButton); + isFirstEnter = false; + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "2", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java deleted file mode 100644 index 9b96c13..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.media.MediaMetadataRetriever; -import android.text.TextUtils; -import android.util.Log; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadCommonCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.FileUtils; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.FloatHub; -import com.pengxh.androidx.lite.hub.LongHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; -import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; -import com.zolad.videoslimmer.VideoSlimmer; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CommonCaseUploadActivity extends AndroidxBaseActivity { - - private static final String TAG = "CaseUploadActivity"; - private final Context context = CommonCaseUploadActivity.this; - private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private ProgressDialog progressDialog; - private EditableImageAdapter imageAdapter; - private AudioRecodeHelper audioRecodeHelper; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - private String audioUrl, videoUrl; - private boolean isFirstEnter = true; - - private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - progressDialog = new ProgressDialog(this); - progressDialog.setMessage("视频压缩中..."); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); - progressDialog.setCancelable(false); - progressDialog.setCanceledOnTouchOutside(false); - - /** - * 计算 +图标 大小 - * - * CarrView水平外边距5dp - * RelativeLayout水平内边距10dp - * RecyclerView左边距100dp - * */ - int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); - int margins = FloatHub.dp2px(this, 3); - int itemSize = (realWidth - 4 * margins) / 3; - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); - params.setMargins(margins, margins, margins, margins); - params.gravity = Gravity.LEFT; - viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); - viewBinding.addVideoView.setLayoutParams(params); - - //图片九宫格 - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - uploadCaseLauncher.launch(intent); - } - }); - - /** - * 案卷录音 - * */ - AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { - @Override - public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { - viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); - window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); - audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseUploadActivity.this).toString()); - break; - case MotionEvent.ACTION_UP: - audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) - window.dismiss(); - viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); - break; - } - return true; - } - }); - - audioRecodeHelper = new AudioRecodeHelper(); - audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { - @Override - public void onUpdate(double db, long time) { - imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); - textView.setText(LongHub.millsToTime(time)); - } - - @Override - public void onStop(String filePath) { - uploadViewModel.uploadAudio(new File(filePath)); - } - }); - } - }); - - /** - * 案卷视频 - * */ - viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PictureSelectorHelper.takeVideo(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - LocalMedia media = result.get(0); - //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" - //需要手动压缩视频 - String mediaRealPath = media.getRealPath(); - if (TextUtils.isEmpty(mediaRealPath)) { - //部分手机getRealPath可能为空,需要备用路径 - mediaRealPath = media.getPath(); - } - if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { - //如果默认和备用路径还是为空,则不压缩上传 - StringHub.show(context, "请先选择案卷类型"); - return; - } - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(mediaRealPath); - String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); - String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); - - assert defaultRotation != null; - compressVideo(mediaRealPath, defaultRotation, defaultBitrate); - } - }); - } - }); - - /** - * 重拍视频 - * */ - viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (viewBinding.videoPlayerView.isShown()) { - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("确定重新拍摄视频材料?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - viewBinding.videoPlayerView.setVisibility(View.GONE); - viewBinding.addVideoView.setVisibility(View.VISIBLE); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - } - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.audioModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - audioUrl = resultBean.getData(); - /** - * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a - * */ - if (!TextUtils.isEmpty(audioUrl)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); - } - } - } - }); - uploadViewModel.videoModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 - viewBinding.addVideoView.setVisibility(View.GONE); - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - videoUrl = resultBean.getData(); - String completeURL = StringHelper.appendCompleteURL(videoUrl); - viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(completeURL) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 6.0以上视频压缩 - */ - private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { - Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); - String outputVideoFile = FileUtils.getOutputVideoFile(); - int width, height, bitrate; - if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 - width = LocaleConstant.DEFAULT_WIDTH / 2; - height = LocaleConstant.DEFAULT_HEIGHT / 2; - } else { - width = LocaleConstant.DEFAULT_HEIGHT / 2; - height = LocaleConstant.DEFAULT_WIDTH / 2; - } - if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { - bitrate = LocaleConstant.BITRATE; - } else { - bitrate = Integer.parseInt(defaultBitrate) / 2; - } - VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { - @Override - public void onStart() { - progressDialog.show(); - } - - @Override - public void onProgress(float percent) { - progressDialog.setProgress((int) percent); - } - - @Override - public void onFinish(boolean result) { - if (result) { - uploadViewModel.uploadVideo(new File(outputVideoFile)); - } else { - StringHub.show(CommonCaseUploadActivity.this, "请先选择案卷类型"); - } - progressDialog.dismiss(); - } - }); - } - - /** - * 首次进入页面显示引导Popup - */ - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (isFirstEnter) { - TextView textView = new TextView(this); - int padding = QMUIDisplayHelper.dp2px(this, 10); - textView.setPadding(padding, padding, padding, padding); - textView.setGravity(Gravity.CENTER); - textView.setText("按住即可开始录音"); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(textView) - .shadow(true) - .arrow(true) - .animStyle(QMUIPopup.ANIM_AUTO) - .dimAmount(0.6f)//60%透明度 - .onDismiss(null) - .show(viewBinding.recodeAudioButton); - isFirstEnter = false; - } - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "2", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java deleted file mode 100644 index bec9609..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java +++ /dev/null @@ -1,225 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadPackageCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class PackageCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = PackageCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private UploadViewModel uploadViewModel; - private CaseViewModel caseViewModel; - private EditableImageAdapter imageAdapter; - private String gridId, shopID; - - private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String shopName = data.getStringExtra("shopName"); - shopID = data.getStringExtra("shopID"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - viewBinding.shopView.setText(shopName); - viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("三包上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", "三包上报"); - packageCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(shopKeeper)) { - StringHub.show(this, "店主名还未填写"); - return; - } - String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(phoneNumber)) { - StringHub.show(this, "电话号码还未填写"); - return; - } - if (StringHub.isPhoneNumber(phoneNumber)) { - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitShopCase("0", "0", longitude, latitude, - "2", "1", - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), - 0, 0, shopID, shopKeeper, phoneNumber); - } else { - StringHub.show(this, "电话号码格式不对"); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java deleted file mode 100644 index a75b868..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java +++ /dev/null @@ -1,361 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadQuickCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class QuickCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = QuickCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真是图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private EditableImageAdapter imageAdapter; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - - private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("快速上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //根据情况加载不同图层 - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - quickCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), "", "", 0, 0); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java deleted file mode 100644 index b680e8f..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.content.Context; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifiedDetailBinding; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.util.ArrayList; - -import cn.jzvd.Jzvd; - -public class CaseVerifiedDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifiedDetailActivity.this; - private CaseViewModel caseViewModel; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷详情"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String id = getIntent().getStringExtra(Constant.INTENT_PARAM); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - caseViewModel.obtainCaseDetail(id); - } - - @Override - protected void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //图片 - String verifyImages = data.getFileIdVerify(); - if (!TextUtils.isEmpty(verifyImages)) { - ArrayList urls = new ArrayList<>(); - String[] split = verifyImages.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int position, long l) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp( - videoUrl, - StringHub.filterSpaceOrEnter(data.getDescription()), - Jzvd.SCREEN_NORMAL - ); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - }); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - public void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java deleted file mode 100644 index 4a8a8ef..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java +++ /dev/null @@ -1,522 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifyDetailBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseNextNodeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseOperateViewModel; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CaseVerifyDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifyDetailActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private NodeViewModel nodeViewModel; - private CaseOperateViewModel operateViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private String id; - private String eorc; - private String typeCode; - private String typeDetailCode; - private String gridId;//可能来自案卷详情,也可能来自地图选点 - private double longitude, latitude; - private String changeState; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private EditableImageAdapter verifyImageAdapter; - - private final ActivityResultLauncher verifyCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - longitude = data.getDoubleExtra("longitude", 0); - latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String casePlace = data.getStringExtra("pos"); - viewBinding.caseCommunityView.setText(community); - if (TextUtils.isEmpty(casePlace)) { - viewBinding.casePlaceView.setText(community); - } else { - viewBinding.casePlaceView.setText(casePlace); - } - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷核实"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - id = getIntent().getStringExtra(Constant.INTENT_PARAM); - - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - nodeViewModel = new ViewModelProvider(this).get(NodeViewModel.class); - operateViewModel = new ViewModelProvider(this).get(CaseOperateViewModel.class); - - caseViewModel.obtainCaseDetail(id); - - verifyImageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(verifyImageAdapter); - } - - @Override - public void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - gridId = data.getGridId(); - String lng = data.getLng(); - if (!TextUtils.isEmpty(lng)) { - longitude = Double.parseDouble(lng); - } - String lat = data.getLat(); - if (!TextUtils.isEmpty(lat)) { - latitude = Double.parseDouble(lat); - } - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getCaseStateName().equals("") ? "无处理意见" : data.getCaseStateName()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //根据source判断是否能够修改案卷类型,11/12是公众号和热线电话,案卷类型可修改;否则不可修改 - int source = data.getSource(); - if (source != 11 && source != 12) { - viewBinding.caseTypeRightImage.setVisibility(View.GONE); - viewBinding.largeTypeRightImage.setVisibility(View.GONE); - viewBinding.smallTypeRightImage.setVisibility(View.GONE); - - viewBinding.caseClassLayout.setClickable(false); - viewBinding.caseLargeClassLayout.setClickable(false); - viewBinding.caseSmallClassLayout.setClickable(false); - } - - //图片 - String images = data.getFileIdVerify(); - if (!TextUtils.isEmpty(images)) { - ArrayList urls = new ArrayList<>(); - String[] split = images.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp(videoUrl, StringHub.filterSpaceOrEnter(data.getDescription()), Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseTypeView.setText(tag); - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() == 0) { - viewBinding.caseLargeTypeView.setText("无小类"); - } else { - viewBinding.caseLargeTypeView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallTypeView.setText("请选择"); - } - } - }); - - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeCode = largeTypeBeans.get(position).getTypeCode(); - - viewBinding.caseLargeTypeView.setText(tag); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - String typeId = dataBean.getId(); - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() == 0) { - viewBinding.caseSmallTypeView.setText("无小类"); - } else { - viewBinding.caseSmallTypeView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - } - } - } - }); - - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - - viewBinding.caseSmallTypeView.setText(tag); - } - }).build().show(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseTypeView.getText().toString(); - if (type.equals("请选择")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - int source = data.getSource(); - if (source == 11 || source == 12) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - verifyCaseLauncher.launch(intent); - } else { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - } - }); - - viewBinding.caseConditionLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - nodeViewModel.obtainNextNode(String.valueOf(data.getCaseState())); - } - }); - nodeViewModel.nodeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseNextNodeBean resultBean) { - if (resultBean.isSuccess()) { - List dataBeans = resultBean.getData(); - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("核实情况"); - for (CaseNextNodeBean.DataBean dataBean : dataBeans) { - sheetBuilder.addItem(dataBean.getNextOperation()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - - CaseNextNodeBean.DataBean dataBean = dataBeans.get(position); - viewBinding.caseConditionView.setText(dataBean.getNextOperation()); - changeState = String.valueOf(dataBean.getNextState()); - } - }).build().show(); - } else { - StringHub.show(context, "该案卷无下级流转节点"); - } - } - }); - - //图片九宫格事件处理 - verifyImageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - verifyImageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.isSuccess()) { - if (verifyImageAdapter.getItemCount() <= 3) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - verifyImageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - operateViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷核实中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "核实失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - private void submitCase() { - String remarks = viewBinding.caseConditionView.getText().toString(); - if (TextUtils.isEmpty(remarks)) { - StringHub.show(this, "核实意见不能为空"); - return; - } - if (TextUtils.isEmpty(changeState)) { - StringHub.show(this, "核实情况还未选择"); - return; - } - int source = data.getSource(); - if (source != 11 && source != 12) { - //修改案卷 - operateViewModel.checkCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList)); - } else { - //补全案卷 - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新选择"); - return; - } - String fieldIntro = viewBinding.casePlaceView.getText().toString(); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - } - if (longitude == 0 || latitude == 0) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - operateViewModel.verifyCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList), - eorc == null ? data.getEorc() : eorc, - typeCode == null ? data.getCasetypeCode() : typeCode, - typeDetailCode == null ? data.getCasetypeDetailCode() : typeDetailCode, - String.valueOf(longitude), String.valueOf(latitude), - "1", gridId.substring(0, 6), - gridId.substring(0, 9), data.getCommunityCode(), gridId, fieldIntro); - } - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java new file mode 100644 index 0000000..eec22e6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java @@ -0,0 +1,168 @@ +package com.casic.dcms.view.verify; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityVerifiedDetailBinding; +import com.casic.dcms.model.CaseDetailBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.MapHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.Constant; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; + +import cn.jzvd.Jzvd; + +public class VerifiedDetailActivity extends AndroidxBaseActivity { + + private final Context context = VerifiedDetailActivity.this; + private CaseViewModel caseViewModel; + private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷详情"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + @Override + protected void initData() { + String id = getIntent().getStringExtra(Constant.INTENT_PARAM); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.obtainCaseDetail(id); + caseViewModel.caseDetailModel.observe(this, new Observer() { + @Override + public void onChanged(CaseDetailBean resultBean) { + if (resultBean.getCode() == 200) { + data = resultBean.getData().get(0); + viewBinding.caseNumberView.setText(data.getCaseid()); + viewBinding.caseTypeView.setText(data.getEorcName()); + viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); + viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); + viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); + viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); + viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); + viewBinding.caseStartTimeView.setText(data.getCreateTime()); + viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); + viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); + + //图片 + String verifyImages = data.getFileIdVerify(); + if (!TextUtils.isEmpty(verifyImages)) { + ArrayList urls = new ArrayList<>(); + String[] split = verifyImages.split(","); + for (String s : split) { + if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { + urls.add(StringHelper.appendCompleteURL(s)); + } + } + ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); + imageAdapter.setImageList(urls); + viewBinding.imageGridView.setAdapter(imageAdapter); + //九宫格点击事件 + viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + if (urls.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); + } + } + }); + } + + //音频 + String audioFile = data.getAudioIdVerify(); + if (!TextUtils.isEmpty(audioFile)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); + } + + //视频 + String videoFile = data.getVideoIdVerify(); + if (!TextUtils.isEmpty(videoFile)) { + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + String videoUrl = StringHelper.appendCompleteURL(videoFile); + viewBinding.videoPlayerView.setUp( + videoUrl, + StringHub.filterSpaceOrEnter(data.getDescription()), + Jzvd.SCREEN_NORMAL + ); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(videoUrl) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + } + }); + } + + @Override + protected void initEvent() { + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); + } + }); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + public void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } + + @Override + protected void onDestroy() { + viewBinding.audioPlayerView.release(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java new file mode 100644 index 0000000..c2a889b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java @@ -0,0 +1,635 @@ +package com.casic.dcms.view.upload; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCommonCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; +import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.zolad.videoslimmer.VideoSlimmer; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class CommonCaseActivity extends AndroidxBaseActivity { + + private static final String TAG = "CommonCaseActivity"; + private final Context context = CommonCaseActivity.this; + private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private ProgressDialog progressDialog; + private EditableImageAdapter imageAdapter; + private AudioRecodeHelper audioRecodeHelper; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + private String audioUrl, videoUrl; + private boolean isFirstEnter = true; + + private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("视频压缩中..."); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); + progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); + + /** + * 计算 +图标 大小 + * + * CarrView水平外边距5dp + * RelativeLayout水平内边距10dp + * RecyclerView左边距100dp + * */ + int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); + int margins = FloatHub.dp2px(this, 3); + int itemSize = (realWidth - 4 * margins) / 3; + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); + params.setMargins(margins, margins, margins, margins); + params.gravity = Gravity.LEFT; + viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); + viewBinding.addVideoView.setLayoutParams(params); + + //图片九宫格 + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + uploadCaseLauncher.launch(intent); + } + }); + + /** + * 案卷录音 + * */ + AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { + @Override + public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { + viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); + audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseActivity.this).toString()); + break; + case MotionEvent.ACTION_UP: + audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) + window.dismiss(); + viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); + break; + } + return true; + } + }); + + audioRecodeHelper = new AudioRecodeHelper(); + audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { + @Override + public void onUpdate(double db, long time) { + imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); + textView.setText(LongHub.millsToTime(time)); + } + + @Override + public void onStop(String filePath) { + uploadViewModel.uploadAudio(new File(filePath)); + } + }); + } + }); + + /** + * 案卷视频 + * */ + viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PictureSelectorHelper.takeVideo(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + LocalMedia media = result.get(0); + //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" + //需要手动压缩视频 + String mediaRealPath = media.getRealPath(); + if (TextUtils.isEmpty(mediaRealPath)) { + //部分手机getRealPath可能为空,需要备用路径 + mediaRealPath = media.getPath(); + } + if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { + //如果默认和备用路径还是为空,则不压缩上传 + StringHub.show(context, "请先选择案卷类型"); + return; + } + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(mediaRealPath); + String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); + + assert defaultRotation != null; + compressVideo(mediaRealPath, defaultRotation, defaultBitrate); + } + }); + } + }); + + /** + * 重拍视频 + * */ + viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (viewBinding.videoPlayerView.isShown()) { + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("确定重新拍摄视频材料?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + viewBinding.videoPlayerView.setVisibility(View.GONE); + viewBinding.addVideoView.setVisibility(View.VISIBLE); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + } + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.audioModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + audioUrl = resultBean.getData(); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + if (!TextUtils.isEmpty(audioUrl)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); + } + } + } + }); + uploadViewModel.videoModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 + viewBinding.addVideoView.setVisibility(View.GONE); + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + videoUrl = resultBean.getData(); + String completeURL = StringHelper.appendCompleteURL(videoUrl); + viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(completeURL) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 6.0以上视频压缩 + */ + private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { + Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); + String outputVideoFile = FileUtils.getOutputVideoFile(); + int width, height, bitrate; + if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 + width = LocaleConstant.DEFAULT_WIDTH / 2; + height = LocaleConstant.DEFAULT_HEIGHT / 2; + } else { + width = LocaleConstant.DEFAULT_HEIGHT / 2; + height = LocaleConstant.DEFAULT_WIDTH / 2; + } + if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { + bitrate = LocaleConstant.BITRATE; + } else { + bitrate = Integer.parseInt(defaultBitrate) / 2; + } + VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { + @Override + public void onStart() { + progressDialog.show(); + } + + @Override + public void onProgress(float percent) { + progressDialog.setProgress((int) percent); + } + + @Override + public void onFinish(boolean result) { + if (result) { + uploadViewModel.uploadVideo(new File(outputVideoFile)); + } else { + StringHub.show(CommonCaseActivity.this, "请先选择案卷类型"); + } + progressDialog.dismiss(); + } + }); + } + + /** + * 首次进入页面显示引导Popup + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (isFirstEnter) { + TextView textView = new TextView(this); + int padding = QMUIDisplayHelper.dp2px(this, 10); + textView.setPadding(padding, padding, padding, padding); + textView.setGravity(Gravity.CENTER); + textView.setText("按住即可开始录音"); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(textView) + .shadow(true) + .arrow(true) + .animStyle(QMUIPopup.ANIM_AUTO) + .dimAmount(0.6f)//60%透明度 + .onDismiss(null) + .show(viewBinding.recodeAudioButton); + isFirstEnter = false; + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "2", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java deleted file mode 100644 index 9b96c13..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.media.MediaMetadataRetriever; -import android.text.TextUtils; -import android.util.Log; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadCommonCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.FileUtils; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.FloatHub; -import com.pengxh.androidx.lite.hub.LongHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; -import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; -import com.zolad.videoslimmer.VideoSlimmer; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CommonCaseUploadActivity extends AndroidxBaseActivity { - - private static final String TAG = "CaseUploadActivity"; - private final Context context = CommonCaseUploadActivity.this; - private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private ProgressDialog progressDialog; - private EditableImageAdapter imageAdapter; - private AudioRecodeHelper audioRecodeHelper; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - private String audioUrl, videoUrl; - private boolean isFirstEnter = true; - - private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - progressDialog = new ProgressDialog(this); - progressDialog.setMessage("视频压缩中..."); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); - progressDialog.setCancelable(false); - progressDialog.setCanceledOnTouchOutside(false); - - /** - * 计算 +图标 大小 - * - * CarrView水平外边距5dp - * RelativeLayout水平内边距10dp - * RecyclerView左边距100dp - * */ - int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); - int margins = FloatHub.dp2px(this, 3); - int itemSize = (realWidth - 4 * margins) / 3; - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); - params.setMargins(margins, margins, margins, margins); - params.gravity = Gravity.LEFT; - viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); - viewBinding.addVideoView.setLayoutParams(params); - - //图片九宫格 - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - uploadCaseLauncher.launch(intent); - } - }); - - /** - * 案卷录音 - * */ - AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { - @Override - public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { - viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); - window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); - audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseUploadActivity.this).toString()); - break; - case MotionEvent.ACTION_UP: - audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) - window.dismiss(); - viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); - break; - } - return true; - } - }); - - audioRecodeHelper = new AudioRecodeHelper(); - audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { - @Override - public void onUpdate(double db, long time) { - imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); - textView.setText(LongHub.millsToTime(time)); - } - - @Override - public void onStop(String filePath) { - uploadViewModel.uploadAudio(new File(filePath)); - } - }); - } - }); - - /** - * 案卷视频 - * */ - viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PictureSelectorHelper.takeVideo(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - LocalMedia media = result.get(0); - //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" - //需要手动压缩视频 - String mediaRealPath = media.getRealPath(); - if (TextUtils.isEmpty(mediaRealPath)) { - //部分手机getRealPath可能为空,需要备用路径 - mediaRealPath = media.getPath(); - } - if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { - //如果默认和备用路径还是为空,则不压缩上传 - StringHub.show(context, "请先选择案卷类型"); - return; - } - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(mediaRealPath); - String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); - String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); - - assert defaultRotation != null; - compressVideo(mediaRealPath, defaultRotation, defaultBitrate); - } - }); - } - }); - - /** - * 重拍视频 - * */ - viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (viewBinding.videoPlayerView.isShown()) { - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("确定重新拍摄视频材料?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - viewBinding.videoPlayerView.setVisibility(View.GONE); - viewBinding.addVideoView.setVisibility(View.VISIBLE); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - } - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.audioModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - audioUrl = resultBean.getData(); - /** - * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a - * */ - if (!TextUtils.isEmpty(audioUrl)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); - } - } - } - }); - uploadViewModel.videoModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 - viewBinding.addVideoView.setVisibility(View.GONE); - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - videoUrl = resultBean.getData(); - String completeURL = StringHelper.appendCompleteURL(videoUrl); - viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(completeURL) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 6.0以上视频压缩 - */ - private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { - Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); - String outputVideoFile = FileUtils.getOutputVideoFile(); - int width, height, bitrate; - if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 - width = LocaleConstant.DEFAULT_WIDTH / 2; - height = LocaleConstant.DEFAULT_HEIGHT / 2; - } else { - width = LocaleConstant.DEFAULT_HEIGHT / 2; - height = LocaleConstant.DEFAULT_WIDTH / 2; - } - if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { - bitrate = LocaleConstant.BITRATE; - } else { - bitrate = Integer.parseInt(defaultBitrate) / 2; - } - VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { - @Override - public void onStart() { - progressDialog.show(); - } - - @Override - public void onProgress(float percent) { - progressDialog.setProgress((int) percent); - } - - @Override - public void onFinish(boolean result) { - if (result) { - uploadViewModel.uploadVideo(new File(outputVideoFile)); - } else { - StringHub.show(CommonCaseUploadActivity.this, "请先选择案卷类型"); - } - progressDialog.dismiss(); - } - }); - } - - /** - * 首次进入页面显示引导Popup - */ - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (isFirstEnter) { - TextView textView = new TextView(this); - int padding = QMUIDisplayHelper.dp2px(this, 10); - textView.setPadding(padding, padding, padding, padding); - textView.setGravity(Gravity.CENTER); - textView.setText("按住即可开始录音"); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(textView) - .shadow(true) - .arrow(true) - .animStyle(QMUIPopup.ANIM_AUTO) - .dimAmount(0.6f)//60%透明度 - .onDismiss(null) - .show(viewBinding.recodeAudioButton); - isFirstEnter = false; - } - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "2", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java deleted file mode 100644 index bec9609..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java +++ /dev/null @@ -1,225 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadPackageCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class PackageCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = PackageCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private UploadViewModel uploadViewModel; - private CaseViewModel caseViewModel; - private EditableImageAdapter imageAdapter; - private String gridId, shopID; - - private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String shopName = data.getStringExtra("shopName"); - shopID = data.getStringExtra("shopID"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - viewBinding.shopView.setText(shopName); - viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("三包上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", "三包上报"); - packageCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(shopKeeper)) { - StringHub.show(this, "店主名还未填写"); - return; - } - String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(phoneNumber)) { - StringHub.show(this, "电话号码还未填写"); - return; - } - if (StringHub.isPhoneNumber(phoneNumber)) { - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitShopCase("0", "0", longitude, latitude, - "2", "1", - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), - 0, 0, shopID, shopKeeper, phoneNumber); - } else { - StringHub.show(this, "电话号码格式不对"); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java deleted file mode 100644 index a75b868..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java +++ /dev/null @@ -1,361 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadQuickCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class QuickCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = QuickCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真是图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private EditableImageAdapter imageAdapter; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - - private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("快速上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //根据情况加载不同图层 - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - quickCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), "", "", 0, 0); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java deleted file mode 100644 index b680e8f..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.content.Context; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifiedDetailBinding; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.util.ArrayList; - -import cn.jzvd.Jzvd; - -public class CaseVerifiedDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifiedDetailActivity.this; - private CaseViewModel caseViewModel; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷详情"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String id = getIntent().getStringExtra(Constant.INTENT_PARAM); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - caseViewModel.obtainCaseDetail(id); - } - - @Override - protected void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //图片 - String verifyImages = data.getFileIdVerify(); - if (!TextUtils.isEmpty(verifyImages)) { - ArrayList urls = new ArrayList<>(); - String[] split = verifyImages.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int position, long l) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp( - videoUrl, - StringHub.filterSpaceOrEnter(data.getDescription()), - Jzvd.SCREEN_NORMAL - ); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - }); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - public void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java deleted file mode 100644 index 4a8a8ef..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java +++ /dev/null @@ -1,522 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifyDetailBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseNextNodeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseOperateViewModel; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CaseVerifyDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifyDetailActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private NodeViewModel nodeViewModel; - private CaseOperateViewModel operateViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private String id; - private String eorc; - private String typeCode; - private String typeDetailCode; - private String gridId;//可能来自案卷详情,也可能来自地图选点 - private double longitude, latitude; - private String changeState; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private EditableImageAdapter verifyImageAdapter; - - private final ActivityResultLauncher verifyCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - longitude = data.getDoubleExtra("longitude", 0); - latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String casePlace = data.getStringExtra("pos"); - viewBinding.caseCommunityView.setText(community); - if (TextUtils.isEmpty(casePlace)) { - viewBinding.casePlaceView.setText(community); - } else { - viewBinding.casePlaceView.setText(casePlace); - } - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷核实"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - id = getIntent().getStringExtra(Constant.INTENT_PARAM); - - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - nodeViewModel = new ViewModelProvider(this).get(NodeViewModel.class); - operateViewModel = new ViewModelProvider(this).get(CaseOperateViewModel.class); - - caseViewModel.obtainCaseDetail(id); - - verifyImageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(verifyImageAdapter); - } - - @Override - public void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - gridId = data.getGridId(); - String lng = data.getLng(); - if (!TextUtils.isEmpty(lng)) { - longitude = Double.parseDouble(lng); - } - String lat = data.getLat(); - if (!TextUtils.isEmpty(lat)) { - latitude = Double.parseDouble(lat); - } - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getCaseStateName().equals("") ? "无处理意见" : data.getCaseStateName()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //根据source判断是否能够修改案卷类型,11/12是公众号和热线电话,案卷类型可修改;否则不可修改 - int source = data.getSource(); - if (source != 11 && source != 12) { - viewBinding.caseTypeRightImage.setVisibility(View.GONE); - viewBinding.largeTypeRightImage.setVisibility(View.GONE); - viewBinding.smallTypeRightImage.setVisibility(View.GONE); - - viewBinding.caseClassLayout.setClickable(false); - viewBinding.caseLargeClassLayout.setClickable(false); - viewBinding.caseSmallClassLayout.setClickable(false); - } - - //图片 - String images = data.getFileIdVerify(); - if (!TextUtils.isEmpty(images)) { - ArrayList urls = new ArrayList<>(); - String[] split = images.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp(videoUrl, StringHub.filterSpaceOrEnter(data.getDescription()), Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseTypeView.setText(tag); - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() == 0) { - viewBinding.caseLargeTypeView.setText("无小类"); - } else { - viewBinding.caseLargeTypeView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallTypeView.setText("请选择"); - } - } - }); - - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeCode = largeTypeBeans.get(position).getTypeCode(); - - viewBinding.caseLargeTypeView.setText(tag); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - String typeId = dataBean.getId(); - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() == 0) { - viewBinding.caseSmallTypeView.setText("无小类"); - } else { - viewBinding.caseSmallTypeView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - } - } - } - }); - - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - - viewBinding.caseSmallTypeView.setText(tag); - } - }).build().show(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseTypeView.getText().toString(); - if (type.equals("请选择")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - int source = data.getSource(); - if (source == 11 || source == 12) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - verifyCaseLauncher.launch(intent); - } else { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - } - }); - - viewBinding.caseConditionLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - nodeViewModel.obtainNextNode(String.valueOf(data.getCaseState())); - } - }); - nodeViewModel.nodeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseNextNodeBean resultBean) { - if (resultBean.isSuccess()) { - List dataBeans = resultBean.getData(); - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("核实情况"); - for (CaseNextNodeBean.DataBean dataBean : dataBeans) { - sheetBuilder.addItem(dataBean.getNextOperation()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - - CaseNextNodeBean.DataBean dataBean = dataBeans.get(position); - viewBinding.caseConditionView.setText(dataBean.getNextOperation()); - changeState = String.valueOf(dataBean.getNextState()); - } - }).build().show(); - } else { - StringHub.show(context, "该案卷无下级流转节点"); - } - } - }); - - //图片九宫格事件处理 - verifyImageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - verifyImageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.isSuccess()) { - if (verifyImageAdapter.getItemCount() <= 3) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - verifyImageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - operateViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷核实中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "核实失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - private void submitCase() { - String remarks = viewBinding.caseConditionView.getText().toString(); - if (TextUtils.isEmpty(remarks)) { - StringHub.show(this, "核实意见不能为空"); - return; - } - if (TextUtils.isEmpty(changeState)) { - StringHub.show(this, "核实情况还未选择"); - return; - } - int source = data.getSource(); - if (source != 11 && source != 12) { - //修改案卷 - operateViewModel.checkCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList)); - } else { - //补全案卷 - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新选择"); - return; - } - String fieldIntro = viewBinding.casePlaceView.getText().toString(); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - } - if (longitude == 0 || latitude == 0) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - operateViewModel.verifyCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList), - eorc == null ? data.getEorc() : eorc, - typeCode == null ? data.getCasetypeCode() : typeCode, - typeDetailCode == null ? data.getCasetypeDetailCode() : typeDetailCode, - String.valueOf(longitude), String.valueOf(latitude), - "1", gridId.substring(0, 6), - gridId.substring(0, 9), data.getCommunityCode(), gridId, fieldIntro); - } - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java new file mode 100644 index 0000000..eec22e6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java @@ -0,0 +1,168 @@ +package com.casic.dcms.view.verify; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityVerifiedDetailBinding; +import com.casic.dcms.model.CaseDetailBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.MapHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.Constant; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; + +import cn.jzvd.Jzvd; + +public class VerifiedDetailActivity extends AndroidxBaseActivity { + + private final Context context = VerifiedDetailActivity.this; + private CaseViewModel caseViewModel; + private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷详情"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + @Override + protected void initData() { + String id = getIntent().getStringExtra(Constant.INTENT_PARAM); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.obtainCaseDetail(id); + caseViewModel.caseDetailModel.observe(this, new Observer() { + @Override + public void onChanged(CaseDetailBean resultBean) { + if (resultBean.getCode() == 200) { + data = resultBean.getData().get(0); + viewBinding.caseNumberView.setText(data.getCaseid()); + viewBinding.caseTypeView.setText(data.getEorcName()); + viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); + viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); + viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); + viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); + viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); + viewBinding.caseStartTimeView.setText(data.getCreateTime()); + viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); + viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); + + //图片 + String verifyImages = data.getFileIdVerify(); + if (!TextUtils.isEmpty(verifyImages)) { + ArrayList urls = new ArrayList<>(); + String[] split = verifyImages.split(","); + for (String s : split) { + if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { + urls.add(StringHelper.appendCompleteURL(s)); + } + } + ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); + imageAdapter.setImageList(urls); + viewBinding.imageGridView.setAdapter(imageAdapter); + //九宫格点击事件 + viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + if (urls.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); + } + } + }); + } + + //音频 + String audioFile = data.getAudioIdVerify(); + if (!TextUtils.isEmpty(audioFile)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); + } + + //视频 + String videoFile = data.getVideoIdVerify(); + if (!TextUtils.isEmpty(videoFile)) { + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + String videoUrl = StringHelper.appendCompleteURL(videoFile); + viewBinding.videoPlayerView.setUp( + videoUrl, + StringHub.filterSpaceOrEnter(data.getDescription()), + Jzvd.SCREEN_NORMAL + ); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(videoUrl) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + } + }); + } + + @Override + protected void initEvent() { + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); + } + }); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + public void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } + + @Override + protected void onDestroy() { + viewBinding.audioPlayerView.release(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java index d4b4b23..68dc3bc 100644 --- a/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java @@ -2,7 +2,6 @@ import android.widget.LinearLayout; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import com.casic.dcms.R; @@ -14,6 +13,7 @@ import com.casic.dcms.utils.LocaleConstant; import com.gyf.immersionbar.ImmersionBar; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -23,8 +23,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText("案卷核实"); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); @@ -41,10 +41,10 @@ fragmentList.add(new CaseVerifyFragment()); fragmentList.add(new CaseVerifiedFragment()); SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), LocaleConstant.CASE_PAGE_TITLES, fragmentList); - viewBinding.verifyViewPager.setAdapter(adapter); + viewBinding.viewPager.setAdapter(adapter); //绑定TabLayout - viewBinding.verifyTabLayout.setupWithViewPager(viewBinding.verifyViewPager); - LinearLayout linearLayout = (LinearLayout) viewBinding.verifyTabLayout.getChildAt(0); + viewBinding.topTabLayout.setupWithViewPager(viewBinding.viewPager); + LinearLayout linearLayout = (LinearLayout) viewBinding.topTabLayout.getChildAt(0); LinearLayoutHelper.setDivider(this, linearLayout); } diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java new file mode 100644 index 0000000..c2a889b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java @@ -0,0 +1,635 @@ +package com.casic.dcms.view.upload; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCommonCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; +import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.zolad.videoslimmer.VideoSlimmer; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class CommonCaseActivity extends AndroidxBaseActivity { + + private static final String TAG = "CommonCaseActivity"; + private final Context context = CommonCaseActivity.this; + private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private ProgressDialog progressDialog; + private EditableImageAdapter imageAdapter; + private AudioRecodeHelper audioRecodeHelper; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + private String audioUrl, videoUrl; + private boolean isFirstEnter = true; + + private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("视频压缩中..."); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); + progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); + + /** + * 计算 +图标 大小 + * + * CarrView水平外边距5dp + * RelativeLayout水平内边距10dp + * RecyclerView左边距100dp + * */ + int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); + int margins = FloatHub.dp2px(this, 3); + int itemSize = (realWidth - 4 * margins) / 3; + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); + params.setMargins(margins, margins, margins, margins); + params.gravity = Gravity.LEFT; + viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); + viewBinding.addVideoView.setLayoutParams(params); + + //图片九宫格 + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + uploadCaseLauncher.launch(intent); + } + }); + + /** + * 案卷录音 + * */ + AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { + @Override + public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { + viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); + audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseActivity.this).toString()); + break; + case MotionEvent.ACTION_UP: + audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) + window.dismiss(); + viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); + break; + } + return true; + } + }); + + audioRecodeHelper = new AudioRecodeHelper(); + audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { + @Override + public void onUpdate(double db, long time) { + imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); + textView.setText(LongHub.millsToTime(time)); + } + + @Override + public void onStop(String filePath) { + uploadViewModel.uploadAudio(new File(filePath)); + } + }); + } + }); + + /** + * 案卷视频 + * */ + viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PictureSelectorHelper.takeVideo(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + LocalMedia media = result.get(0); + //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" + //需要手动压缩视频 + String mediaRealPath = media.getRealPath(); + if (TextUtils.isEmpty(mediaRealPath)) { + //部分手机getRealPath可能为空,需要备用路径 + mediaRealPath = media.getPath(); + } + if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { + //如果默认和备用路径还是为空,则不压缩上传 + StringHub.show(context, "请先选择案卷类型"); + return; + } + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(mediaRealPath); + String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); + + assert defaultRotation != null; + compressVideo(mediaRealPath, defaultRotation, defaultBitrate); + } + }); + } + }); + + /** + * 重拍视频 + * */ + viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (viewBinding.videoPlayerView.isShown()) { + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("确定重新拍摄视频材料?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + viewBinding.videoPlayerView.setVisibility(View.GONE); + viewBinding.addVideoView.setVisibility(View.VISIBLE); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + } + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.audioModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + audioUrl = resultBean.getData(); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + if (!TextUtils.isEmpty(audioUrl)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); + } + } + } + }); + uploadViewModel.videoModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 + viewBinding.addVideoView.setVisibility(View.GONE); + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + videoUrl = resultBean.getData(); + String completeURL = StringHelper.appendCompleteURL(videoUrl); + viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(completeURL) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 6.0以上视频压缩 + */ + private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { + Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); + String outputVideoFile = FileUtils.getOutputVideoFile(); + int width, height, bitrate; + if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 + width = LocaleConstant.DEFAULT_WIDTH / 2; + height = LocaleConstant.DEFAULT_HEIGHT / 2; + } else { + width = LocaleConstant.DEFAULT_HEIGHT / 2; + height = LocaleConstant.DEFAULT_WIDTH / 2; + } + if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { + bitrate = LocaleConstant.BITRATE; + } else { + bitrate = Integer.parseInt(defaultBitrate) / 2; + } + VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { + @Override + public void onStart() { + progressDialog.show(); + } + + @Override + public void onProgress(float percent) { + progressDialog.setProgress((int) percent); + } + + @Override + public void onFinish(boolean result) { + if (result) { + uploadViewModel.uploadVideo(new File(outputVideoFile)); + } else { + StringHub.show(CommonCaseActivity.this, "请先选择案卷类型"); + } + progressDialog.dismiss(); + } + }); + } + + /** + * 首次进入页面显示引导Popup + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (isFirstEnter) { + TextView textView = new TextView(this); + int padding = QMUIDisplayHelper.dp2px(this, 10); + textView.setPadding(padding, padding, padding, padding); + textView.setGravity(Gravity.CENTER); + textView.setText("按住即可开始录音"); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(textView) + .shadow(true) + .arrow(true) + .animStyle(QMUIPopup.ANIM_AUTO) + .dimAmount(0.6f)//60%透明度 + .onDismiss(null) + .show(viewBinding.recodeAudioButton); + isFirstEnter = false; + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "2", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java deleted file mode 100644 index 9b96c13..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.media.MediaMetadataRetriever; -import android.text.TextUtils; -import android.util.Log; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadCommonCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.FileUtils; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.FloatHub; -import com.pengxh.androidx.lite.hub.LongHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; -import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; -import com.zolad.videoslimmer.VideoSlimmer; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CommonCaseUploadActivity extends AndroidxBaseActivity { - - private static final String TAG = "CaseUploadActivity"; - private final Context context = CommonCaseUploadActivity.this; - private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private ProgressDialog progressDialog; - private EditableImageAdapter imageAdapter; - private AudioRecodeHelper audioRecodeHelper; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - private String audioUrl, videoUrl; - private boolean isFirstEnter = true; - - private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - progressDialog = new ProgressDialog(this); - progressDialog.setMessage("视频压缩中..."); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); - progressDialog.setCancelable(false); - progressDialog.setCanceledOnTouchOutside(false); - - /** - * 计算 +图标 大小 - * - * CarrView水平外边距5dp - * RelativeLayout水平内边距10dp - * RecyclerView左边距100dp - * */ - int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); - int margins = FloatHub.dp2px(this, 3); - int itemSize = (realWidth - 4 * margins) / 3; - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); - params.setMargins(margins, margins, margins, margins); - params.gravity = Gravity.LEFT; - viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); - viewBinding.addVideoView.setLayoutParams(params); - - //图片九宫格 - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - uploadCaseLauncher.launch(intent); - } - }); - - /** - * 案卷录音 - * */ - AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { - @Override - public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { - viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); - window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); - audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseUploadActivity.this).toString()); - break; - case MotionEvent.ACTION_UP: - audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) - window.dismiss(); - viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); - break; - } - return true; - } - }); - - audioRecodeHelper = new AudioRecodeHelper(); - audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { - @Override - public void onUpdate(double db, long time) { - imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); - textView.setText(LongHub.millsToTime(time)); - } - - @Override - public void onStop(String filePath) { - uploadViewModel.uploadAudio(new File(filePath)); - } - }); - } - }); - - /** - * 案卷视频 - * */ - viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PictureSelectorHelper.takeVideo(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - LocalMedia media = result.get(0); - //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" - //需要手动压缩视频 - String mediaRealPath = media.getRealPath(); - if (TextUtils.isEmpty(mediaRealPath)) { - //部分手机getRealPath可能为空,需要备用路径 - mediaRealPath = media.getPath(); - } - if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { - //如果默认和备用路径还是为空,则不压缩上传 - StringHub.show(context, "请先选择案卷类型"); - return; - } - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(mediaRealPath); - String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); - String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); - - assert defaultRotation != null; - compressVideo(mediaRealPath, defaultRotation, defaultBitrate); - } - }); - } - }); - - /** - * 重拍视频 - * */ - viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (viewBinding.videoPlayerView.isShown()) { - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("确定重新拍摄视频材料?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - viewBinding.videoPlayerView.setVisibility(View.GONE); - viewBinding.addVideoView.setVisibility(View.VISIBLE); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - } - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.audioModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - audioUrl = resultBean.getData(); - /** - * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a - * */ - if (!TextUtils.isEmpty(audioUrl)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); - } - } - } - }); - uploadViewModel.videoModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 - viewBinding.addVideoView.setVisibility(View.GONE); - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - videoUrl = resultBean.getData(); - String completeURL = StringHelper.appendCompleteURL(videoUrl); - viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(completeURL) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 6.0以上视频压缩 - */ - private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { - Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); - String outputVideoFile = FileUtils.getOutputVideoFile(); - int width, height, bitrate; - if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 - width = LocaleConstant.DEFAULT_WIDTH / 2; - height = LocaleConstant.DEFAULT_HEIGHT / 2; - } else { - width = LocaleConstant.DEFAULT_HEIGHT / 2; - height = LocaleConstant.DEFAULT_WIDTH / 2; - } - if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { - bitrate = LocaleConstant.BITRATE; - } else { - bitrate = Integer.parseInt(defaultBitrate) / 2; - } - VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { - @Override - public void onStart() { - progressDialog.show(); - } - - @Override - public void onProgress(float percent) { - progressDialog.setProgress((int) percent); - } - - @Override - public void onFinish(boolean result) { - if (result) { - uploadViewModel.uploadVideo(new File(outputVideoFile)); - } else { - StringHub.show(CommonCaseUploadActivity.this, "请先选择案卷类型"); - } - progressDialog.dismiss(); - } - }); - } - - /** - * 首次进入页面显示引导Popup - */ - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (isFirstEnter) { - TextView textView = new TextView(this); - int padding = QMUIDisplayHelper.dp2px(this, 10); - textView.setPadding(padding, padding, padding, padding); - textView.setGravity(Gravity.CENTER); - textView.setText("按住即可开始录音"); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(textView) - .shadow(true) - .arrow(true) - .animStyle(QMUIPopup.ANIM_AUTO) - .dimAmount(0.6f)//60%透明度 - .onDismiss(null) - .show(viewBinding.recodeAudioButton); - isFirstEnter = false; - } - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "2", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java deleted file mode 100644 index bec9609..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java +++ /dev/null @@ -1,225 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadPackageCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class PackageCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = PackageCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private UploadViewModel uploadViewModel; - private CaseViewModel caseViewModel; - private EditableImageAdapter imageAdapter; - private String gridId, shopID; - - private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String shopName = data.getStringExtra("shopName"); - shopID = data.getStringExtra("shopID"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - viewBinding.shopView.setText(shopName); - viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("三包上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", "三包上报"); - packageCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(shopKeeper)) { - StringHub.show(this, "店主名还未填写"); - return; - } - String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(phoneNumber)) { - StringHub.show(this, "电话号码还未填写"); - return; - } - if (StringHub.isPhoneNumber(phoneNumber)) { - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitShopCase("0", "0", longitude, latitude, - "2", "1", - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), - 0, 0, shopID, shopKeeper, phoneNumber); - } else { - StringHub.show(this, "电话号码格式不对"); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java deleted file mode 100644 index a75b868..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java +++ /dev/null @@ -1,361 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadQuickCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class QuickCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = QuickCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真是图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private EditableImageAdapter imageAdapter; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - - private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("快速上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //根据情况加载不同图层 - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - quickCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), "", "", 0, 0); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java deleted file mode 100644 index b680e8f..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.content.Context; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifiedDetailBinding; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.util.ArrayList; - -import cn.jzvd.Jzvd; - -public class CaseVerifiedDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifiedDetailActivity.this; - private CaseViewModel caseViewModel; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷详情"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String id = getIntent().getStringExtra(Constant.INTENT_PARAM); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - caseViewModel.obtainCaseDetail(id); - } - - @Override - protected void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //图片 - String verifyImages = data.getFileIdVerify(); - if (!TextUtils.isEmpty(verifyImages)) { - ArrayList urls = new ArrayList<>(); - String[] split = verifyImages.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int position, long l) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp( - videoUrl, - StringHub.filterSpaceOrEnter(data.getDescription()), - Jzvd.SCREEN_NORMAL - ); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - }); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - public void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java deleted file mode 100644 index 4a8a8ef..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java +++ /dev/null @@ -1,522 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifyDetailBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseNextNodeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseOperateViewModel; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CaseVerifyDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifyDetailActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private NodeViewModel nodeViewModel; - private CaseOperateViewModel operateViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private String id; - private String eorc; - private String typeCode; - private String typeDetailCode; - private String gridId;//可能来自案卷详情,也可能来自地图选点 - private double longitude, latitude; - private String changeState; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private EditableImageAdapter verifyImageAdapter; - - private final ActivityResultLauncher verifyCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - longitude = data.getDoubleExtra("longitude", 0); - latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String casePlace = data.getStringExtra("pos"); - viewBinding.caseCommunityView.setText(community); - if (TextUtils.isEmpty(casePlace)) { - viewBinding.casePlaceView.setText(community); - } else { - viewBinding.casePlaceView.setText(casePlace); - } - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷核实"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - id = getIntent().getStringExtra(Constant.INTENT_PARAM); - - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - nodeViewModel = new ViewModelProvider(this).get(NodeViewModel.class); - operateViewModel = new ViewModelProvider(this).get(CaseOperateViewModel.class); - - caseViewModel.obtainCaseDetail(id); - - verifyImageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(verifyImageAdapter); - } - - @Override - public void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - gridId = data.getGridId(); - String lng = data.getLng(); - if (!TextUtils.isEmpty(lng)) { - longitude = Double.parseDouble(lng); - } - String lat = data.getLat(); - if (!TextUtils.isEmpty(lat)) { - latitude = Double.parseDouble(lat); - } - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getCaseStateName().equals("") ? "无处理意见" : data.getCaseStateName()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //根据source判断是否能够修改案卷类型,11/12是公众号和热线电话,案卷类型可修改;否则不可修改 - int source = data.getSource(); - if (source != 11 && source != 12) { - viewBinding.caseTypeRightImage.setVisibility(View.GONE); - viewBinding.largeTypeRightImage.setVisibility(View.GONE); - viewBinding.smallTypeRightImage.setVisibility(View.GONE); - - viewBinding.caseClassLayout.setClickable(false); - viewBinding.caseLargeClassLayout.setClickable(false); - viewBinding.caseSmallClassLayout.setClickable(false); - } - - //图片 - String images = data.getFileIdVerify(); - if (!TextUtils.isEmpty(images)) { - ArrayList urls = new ArrayList<>(); - String[] split = images.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp(videoUrl, StringHub.filterSpaceOrEnter(data.getDescription()), Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseTypeView.setText(tag); - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() == 0) { - viewBinding.caseLargeTypeView.setText("无小类"); - } else { - viewBinding.caseLargeTypeView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallTypeView.setText("请选择"); - } - } - }); - - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeCode = largeTypeBeans.get(position).getTypeCode(); - - viewBinding.caseLargeTypeView.setText(tag); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - String typeId = dataBean.getId(); - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() == 0) { - viewBinding.caseSmallTypeView.setText("无小类"); - } else { - viewBinding.caseSmallTypeView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - } - } - } - }); - - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - - viewBinding.caseSmallTypeView.setText(tag); - } - }).build().show(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseTypeView.getText().toString(); - if (type.equals("请选择")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - int source = data.getSource(); - if (source == 11 || source == 12) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - verifyCaseLauncher.launch(intent); - } else { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - } - }); - - viewBinding.caseConditionLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - nodeViewModel.obtainNextNode(String.valueOf(data.getCaseState())); - } - }); - nodeViewModel.nodeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseNextNodeBean resultBean) { - if (resultBean.isSuccess()) { - List dataBeans = resultBean.getData(); - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("核实情况"); - for (CaseNextNodeBean.DataBean dataBean : dataBeans) { - sheetBuilder.addItem(dataBean.getNextOperation()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - - CaseNextNodeBean.DataBean dataBean = dataBeans.get(position); - viewBinding.caseConditionView.setText(dataBean.getNextOperation()); - changeState = String.valueOf(dataBean.getNextState()); - } - }).build().show(); - } else { - StringHub.show(context, "该案卷无下级流转节点"); - } - } - }); - - //图片九宫格事件处理 - verifyImageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - verifyImageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.isSuccess()) { - if (verifyImageAdapter.getItemCount() <= 3) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - verifyImageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - operateViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷核实中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "核实失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - private void submitCase() { - String remarks = viewBinding.caseConditionView.getText().toString(); - if (TextUtils.isEmpty(remarks)) { - StringHub.show(this, "核实意见不能为空"); - return; - } - if (TextUtils.isEmpty(changeState)) { - StringHub.show(this, "核实情况还未选择"); - return; - } - int source = data.getSource(); - if (source != 11 && source != 12) { - //修改案卷 - operateViewModel.checkCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList)); - } else { - //补全案卷 - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新选择"); - return; - } - String fieldIntro = viewBinding.casePlaceView.getText().toString(); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - } - if (longitude == 0 || latitude == 0) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - operateViewModel.verifyCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList), - eorc == null ? data.getEorc() : eorc, - typeCode == null ? data.getCasetypeCode() : typeCode, - typeDetailCode == null ? data.getCasetypeDetailCode() : typeDetailCode, - String.valueOf(longitude), String.valueOf(latitude), - "1", gridId.substring(0, 6), - gridId.substring(0, 9), data.getCommunityCode(), gridId, fieldIntro); - } - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java new file mode 100644 index 0000000..eec22e6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java @@ -0,0 +1,168 @@ +package com.casic.dcms.view.verify; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityVerifiedDetailBinding; +import com.casic.dcms.model.CaseDetailBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.MapHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.Constant; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; + +import cn.jzvd.Jzvd; + +public class VerifiedDetailActivity extends AndroidxBaseActivity { + + private final Context context = VerifiedDetailActivity.this; + private CaseViewModel caseViewModel; + private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷详情"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + @Override + protected void initData() { + String id = getIntent().getStringExtra(Constant.INTENT_PARAM); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.obtainCaseDetail(id); + caseViewModel.caseDetailModel.observe(this, new Observer() { + @Override + public void onChanged(CaseDetailBean resultBean) { + if (resultBean.getCode() == 200) { + data = resultBean.getData().get(0); + viewBinding.caseNumberView.setText(data.getCaseid()); + viewBinding.caseTypeView.setText(data.getEorcName()); + viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); + viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); + viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); + viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); + viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); + viewBinding.caseStartTimeView.setText(data.getCreateTime()); + viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); + viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); + + //图片 + String verifyImages = data.getFileIdVerify(); + if (!TextUtils.isEmpty(verifyImages)) { + ArrayList urls = new ArrayList<>(); + String[] split = verifyImages.split(","); + for (String s : split) { + if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { + urls.add(StringHelper.appendCompleteURL(s)); + } + } + ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); + imageAdapter.setImageList(urls); + viewBinding.imageGridView.setAdapter(imageAdapter); + //九宫格点击事件 + viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + if (urls.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); + } + } + }); + } + + //音频 + String audioFile = data.getAudioIdVerify(); + if (!TextUtils.isEmpty(audioFile)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); + } + + //视频 + String videoFile = data.getVideoIdVerify(); + if (!TextUtils.isEmpty(videoFile)) { + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + String videoUrl = StringHelper.appendCompleteURL(videoFile); + viewBinding.videoPlayerView.setUp( + videoUrl, + StringHub.filterSpaceOrEnter(data.getDescription()), + Jzvd.SCREEN_NORMAL + ); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(videoUrl) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + } + }); + } + + @Override + protected void initEvent() { + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); + } + }); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + public void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } + + @Override + protected void onDestroy() { + viewBinding.audioPlayerView.release(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java index d4b4b23..68dc3bc 100644 --- a/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java @@ -2,7 +2,6 @@ import android.widget.LinearLayout; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import com.casic.dcms.R; @@ -14,6 +13,7 @@ import com.casic.dcms.utils.LocaleConstant; import com.gyf.immersionbar.ImmersionBar; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -23,8 +23,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText("案卷核实"); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); @@ -41,10 +41,10 @@ fragmentList.add(new CaseVerifyFragment()); fragmentList.add(new CaseVerifiedFragment()); SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), LocaleConstant.CASE_PAGE_TITLES, fragmentList); - viewBinding.verifyViewPager.setAdapter(adapter); + viewBinding.viewPager.setAdapter(adapter); //绑定TabLayout - viewBinding.verifyTabLayout.setupWithViewPager(viewBinding.verifyViewPager); - LinearLayout linearLayout = (LinearLayout) viewBinding.verifyTabLayout.getChildAt(0); + viewBinding.topTabLayout.setupWithViewPager(viewBinding.viewPager); + LinearLayout linearLayout = (LinearLayout) viewBinding.topTabLayout.getChildAt(0); LinearLayoutHelper.setDivider(this, linearLayout); } diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifyDetailActivity.java new file mode 100644 index 0000000..207394d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifyDetailActivity.java @@ -0,0 +1,522 @@ +package com.casic.dcms.view.verify; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityVerifyDetailBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseDetailBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseNextNodeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.MapHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseOperateViewModel; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.NodeViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.Constant; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class VerifyDetailActivity extends AndroidxBaseActivity { + + private final Context context = VerifyDetailActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private NodeViewModel nodeViewModel; + private CaseOperateViewModel operateViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private String id; + private String eorc; + private String typeCode; + private String typeDetailCode; + private String gridId;//可能来自案卷详情,也可能来自地图选点 + private double longitude, latitude; + private String changeState; + private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); + private EditableImageAdapter verifyImageAdapter; + + private final ActivityResultLauncher verifyCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + longitude = data.getDoubleExtra("longitude", 0); + latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String casePlace = data.getStringExtra("pos"); + viewBinding.caseCommunityView.setText(community); + if (TextUtils.isEmpty(casePlace)) { + viewBinding.casePlaceView.setText(community); + } else { + viewBinding.casePlaceView.setText(casePlace); + } + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷核实"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + id = getIntent().getStringExtra(Constant.INTENT_PARAM); + + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + nodeViewModel = new ViewModelProvider(this).get(NodeViewModel.class); + operateViewModel = new ViewModelProvider(this).get(CaseOperateViewModel.class); + + caseViewModel.obtainCaseDetail(id); + + verifyImageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(verifyImageAdapter); + } + + @Override + public void initEvent() { + caseViewModel.caseDetailModel.observe(this, new Observer() { + @Override + public void onChanged(CaseDetailBean resultBean) { + if (resultBean.getCode() == 200) { + data = resultBean.getData().get(0); + gridId = data.getGridId(); + String lng = data.getLng(); + if (!TextUtils.isEmpty(lng)) { + longitude = Double.parseDouble(lng); + } + String lat = data.getLat(); + if (!TextUtils.isEmpty(lat)) { + latitude = Double.parseDouble(lat); + } + viewBinding.caseNumberView.setText(data.getCaseid()); + viewBinding.caseTypeView.setText(data.getEorcName()); + viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); + viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); + viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); + viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); + viewBinding.caseHandleView.setText(data.getCaseStateName().equals("") ? "无处理意见" : data.getCaseStateName()); + viewBinding.caseStartTimeView.setText(data.getCreateTime()); + viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); + viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); + + //根据source判断是否能够修改案卷类型,11/12是公众号和热线电话,案卷类型可修改;否则不可修改 + int source = data.getSource(); + if (source != 11 && source != 12) { + viewBinding.caseTypeRightImage.setVisibility(View.GONE); + viewBinding.largeTypeRightImage.setVisibility(View.GONE); + viewBinding.smallTypeRightImage.setVisibility(View.GONE); + + viewBinding.caseClassLayout.setClickable(false); + viewBinding.caseLargeClassLayout.setClickable(false); + viewBinding.caseSmallClassLayout.setClickable(false); + } + + //图片 + String images = data.getFileIdVerify(); + if (!TextUtils.isEmpty(images)) { + ArrayList urls = new ArrayList<>(); + String[] split = images.split(","); + for (String s : split) { + if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { + urls.add(StringHelper.appendCompleteURL(s)); + } + } + ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); + imageAdapter.setImageList(urls); + viewBinding.imageGridView.setAdapter(imageAdapter); + //九宫格点击事件 + viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (urls.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); + } + } + }); + } + + //音频 + String audioFile = data.getAudioIdVerify(); + if (!TextUtils.isEmpty(audioFile)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); + } + + //视频 + String videoFile = data.getVideoIdVerify(); + if (!TextUtils.isEmpty(videoFile)) { + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + String videoUrl = StringHelper.appendCompleteURL(videoFile); + viewBinding.videoPlayerView.setUp(videoUrl, StringHub.filterSpaceOrEnter(data.getDescription()), Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(videoUrl) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseTypeView.setText(tag); + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() == 0) { + viewBinding.caseLargeTypeView.setText("无小类"); + } else { + viewBinding.caseLargeTypeView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallTypeView.setText("请选择"); + } + } + }); + + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + typeCode = largeTypeBeans.get(position).getTypeCode(); + + viewBinding.caseLargeTypeView.setText(tag); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() == 0) { + viewBinding.caseSmallTypeView.setText("无小类"); + } else { + viewBinding.caseSmallTypeView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + } + } + } + }); + + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + + viewBinding.caseSmallTypeView.setText(tag); + } + }).build().show(); + } + } + }); + + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseTypeView.getText().toString(); + if (type.equals("请选择")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + int source = data.getSource(); + if (source == 11 || source == 12) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + verifyCaseLauncher.launch(intent); + } else { + MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); + } + } + }); + + viewBinding.caseConditionLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + nodeViewModel.obtainNextNode(String.valueOf(data.getCaseState())); + } + }); + nodeViewModel.nodeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseNextNodeBean resultBean) { + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("核实情况"); + for (CaseNextNodeBean.DataBean dataBean : dataBeans) { + sheetBuilder.addItem(dataBean.getNextOperation()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + CaseNextNodeBean.DataBean dataBean = dataBeans.get(position); + viewBinding.caseConditionView.setText(dataBean.getNextOperation()); + changeState = String.valueOf(dataBean.getNextState()); + } + }).build().show(); + } else { + StringHub.show(context, "该案卷无下级流转节点"); + } + } + }); + + //图片九宫格事件处理 + verifyImageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + verifyImageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.isSuccess()) { + if (verifyImageAdapter.getItemCount() <= 3) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + verifyImageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + operateViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷核实中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "核实失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + private void submitCase() { + String remarks = viewBinding.caseConditionView.getText().toString(); + if (TextUtils.isEmpty(remarks)) { + StringHub.show(this, "核实意见不能为空"); + return; + } + if (TextUtils.isEmpty(changeState)) { + StringHub.show(this, "核实情况还未选择"); + return; + } + int source = data.getSource(); + if (source != 11 && source != 12) { + //修改案卷 + operateViewModel.checkCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), + changeState, remarks, StringHelper.reformatURL(imageList)); + } else { + //补全案卷 + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新选择"); + return; + } + String fieldIntro = viewBinding.casePlaceView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + } + if (longitude == 0 || latitude == 0) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + operateViewModel.verifyCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), + changeState, remarks, StringHelper.reformatURL(imageList), + eorc == null ? data.getEorc() : eorc, + typeCode == null ? data.getCasetypeCode() : typeCode, + typeDetailCode == null ? data.getCasetypeDetailCode() : typeDetailCode, + String.valueOf(longitude), String.valueOf(latitude), + "1", gridId.substring(0, 6), + gridId.substring(0, 9), data.getCommunityCode(), gridId, fieldIntro); + } + } + + @Override + protected void onDestroy() { + viewBinding.audioPlayerView.release(); + super.onDestroy(); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java new file mode 100644 index 0000000..c2a889b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java @@ -0,0 +1,635 @@ +package com.casic.dcms.view.upload; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCommonCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; +import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.zolad.videoslimmer.VideoSlimmer; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class CommonCaseActivity extends AndroidxBaseActivity { + + private static final String TAG = "CommonCaseActivity"; + private final Context context = CommonCaseActivity.this; + private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private ProgressDialog progressDialog; + private EditableImageAdapter imageAdapter; + private AudioRecodeHelper audioRecodeHelper; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + private String audioUrl, videoUrl; + private boolean isFirstEnter = true; + + private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("视频压缩中..."); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); + progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); + + /** + * 计算 +图标 大小 + * + * CarrView水平外边距5dp + * RelativeLayout水平内边距10dp + * RecyclerView左边距100dp + * */ + int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); + int margins = FloatHub.dp2px(this, 3); + int itemSize = (realWidth - 4 * margins) / 3; + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); + params.setMargins(margins, margins, margins, margins); + params.gravity = Gravity.LEFT; + viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); + viewBinding.addVideoView.setLayoutParams(params); + + //图片九宫格 + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + uploadCaseLauncher.launch(intent); + } + }); + + /** + * 案卷录音 + * */ + AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { + @Override + public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { + viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); + audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseActivity.this).toString()); + break; + case MotionEvent.ACTION_UP: + audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) + window.dismiss(); + viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); + break; + } + return true; + } + }); + + audioRecodeHelper = new AudioRecodeHelper(); + audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { + @Override + public void onUpdate(double db, long time) { + imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); + textView.setText(LongHub.millsToTime(time)); + } + + @Override + public void onStop(String filePath) { + uploadViewModel.uploadAudio(new File(filePath)); + } + }); + } + }); + + /** + * 案卷视频 + * */ + viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PictureSelectorHelper.takeVideo(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + LocalMedia media = result.get(0); + //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" + //需要手动压缩视频 + String mediaRealPath = media.getRealPath(); + if (TextUtils.isEmpty(mediaRealPath)) { + //部分手机getRealPath可能为空,需要备用路径 + mediaRealPath = media.getPath(); + } + if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { + //如果默认和备用路径还是为空,则不压缩上传 + StringHub.show(context, "请先选择案卷类型"); + return; + } + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(mediaRealPath); + String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); + + assert defaultRotation != null; + compressVideo(mediaRealPath, defaultRotation, defaultBitrate); + } + }); + } + }); + + /** + * 重拍视频 + * */ + viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (viewBinding.videoPlayerView.isShown()) { + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("确定重新拍摄视频材料?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + viewBinding.videoPlayerView.setVisibility(View.GONE); + viewBinding.addVideoView.setVisibility(View.VISIBLE); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + } + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.audioModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + audioUrl = resultBean.getData(); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + if (!TextUtils.isEmpty(audioUrl)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); + } + } + } + }); + uploadViewModel.videoModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 + viewBinding.addVideoView.setVisibility(View.GONE); + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + videoUrl = resultBean.getData(); + String completeURL = StringHelper.appendCompleteURL(videoUrl); + viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(completeURL) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 6.0以上视频压缩 + */ + private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { + Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); + String outputVideoFile = FileUtils.getOutputVideoFile(); + int width, height, bitrate; + if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 + width = LocaleConstant.DEFAULT_WIDTH / 2; + height = LocaleConstant.DEFAULT_HEIGHT / 2; + } else { + width = LocaleConstant.DEFAULT_HEIGHT / 2; + height = LocaleConstant.DEFAULT_WIDTH / 2; + } + if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { + bitrate = LocaleConstant.BITRATE; + } else { + bitrate = Integer.parseInt(defaultBitrate) / 2; + } + VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { + @Override + public void onStart() { + progressDialog.show(); + } + + @Override + public void onProgress(float percent) { + progressDialog.setProgress((int) percent); + } + + @Override + public void onFinish(boolean result) { + if (result) { + uploadViewModel.uploadVideo(new File(outputVideoFile)); + } else { + StringHub.show(CommonCaseActivity.this, "请先选择案卷类型"); + } + progressDialog.dismiss(); + } + }); + } + + /** + * 首次进入页面显示引导Popup + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (isFirstEnter) { + TextView textView = new TextView(this); + int padding = QMUIDisplayHelper.dp2px(this, 10); + textView.setPadding(padding, padding, padding, padding); + textView.setGravity(Gravity.CENTER); + textView.setText("按住即可开始录音"); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(textView) + .shadow(true) + .arrow(true) + .animStyle(QMUIPopup.ANIM_AUTO) + .dimAmount(0.6f)//60%透明度 + .onDismiss(null) + .show(viewBinding.recodeAudioButton); + isFirstEnter = false; + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "2", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java deleted file mode 100644 index 9b96c13..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.media.MediaMetadataRetriever; -import android.text.TextUtils; -import android.util.Log; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadCommonCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.FileUtils; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.FloatHub; -import com.pengxh.androidx.lite.hub.LongHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; -import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; -import com.zolad.videoslimmer.VideoSlimmer; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CommonCaseUploadActivity extends AndroidxBaseActivity { - - private static final String TAG = "CaseUploadActivity"; - private final Context context = CommonCaseUploadActivity.this; - private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private ProgressDialog progressDialog; - private EditableImageAdapter imageAdapter; - private AudioRecodeHelper audioRecodeHelper; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - private String audioUrl, videoUrl; - private boolean isFirstEnter = true; - - private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - progressDialog = new ProgressDialog(this); - progressDialog.setMessage("视频压缩中..."); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); - progressDialog.setCancelable(false); - progressDialog.setCanceledOnTouchOutside(false); - - /** - * 计算 +图标 大小 - * - * CarrView水平外边距5dp - * RelativeLayout水平内边距10dp - * RecyclerView左边距100dp - * */ - int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); - int margins = FloatHub.dp2px(this, 3); - int itemSize = (realWidth - 4 * margins) / 3; - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); - params.setMargins(margins, margins, margins, margins); - params.gravity = Gravity.LEFT; - viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); - viewBinding.addVideoView.setLayoutParams(params); - - //图片九宫格 - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - uploadCaseLauncher.launch(intent); - } - }); - - /** - * 案卷录音 - * */ - AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { - @Override - public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { - viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); - window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); - audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseUploadActivity.this).toString()); - break; - case MotionEvent.ACTION_UP: - audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) - window.dismiss(); - viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); - break; - } - return true; - } - }); - - audioRecodeHelper = new AudioRecodeHelper(); - audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { - @Override - public void onUpdate(double db, long time) { - imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); - textView.setText(LongHub.millsToTime(time)); - } - - @Override - public void onStop(String filePath) { - uploadViewModel.uploadAudio(new File(filePath)); - } - }); - } - }); - - /** - * 案卷视频 - * */ - viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PictureSelectorHelper.takeVideo(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - LocalMedia media = result.get(0); - //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" - //需要手动压缩视频 - String mediaRealPath = media.getRealPath(); - if (TextUtils.isEmpty(mediaRealPath)) { - //部分手机getRealPath可能为空,需要备用路径 - mediaRealPath = media.getPath(); - } - if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { - //如果默认和备用路径还是为空,则不压缩上传 - StringHub.show(context, "请先选择案卷类型"); - return; - } - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(mediaRealPath); - String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); - String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); - - assert defaultRotation != null; - compressVideo(mediaRealPath, defaultRotation, defaultBitrate); - } - }); - } - }); - - /** - * 重拍视频 - * */ - viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (viewBinding.videoPlayerView.isShown()) { - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("确定重新拍摄视频材料?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - viewBinding.videoPlayerView.setVisibility(View.GONE); - viewBinding.addVideoView.setVisibility(View.VISIBLE); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - } - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.audioModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - audioUrl = resultBean.getData(); - /** - * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a - * */ - if (!TextUtils.isEmpty(audioUrl)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); - } - } - } - }); - uploadViewModel.videoModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 - viewBinding.addVideoView.setVisibility(View.GONE); - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - videoUrl = resultBean.getData(); - String completeURL = StringHelper.appendCompleteURL(videoUrl); - viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(completeURL) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 6.0以上视频压缩 - */ - private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { - Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); - String outputVideoFile = FileUtils.getOutputVideoFile(); - int width, height, bitrate; - if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 - width = LocaleConstant.DEFAULT_WIDTH / 2; - height = LocaleConstant.DEFAULT_HEIGHT / 2; - } else { - width = LocaleConstant.DEFAULT_HEIGHT / 2; - height = LocaleConstant.DEFAULT_WIDTH / 2; - } - if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { - bitrate = LocaleConstant.BITRATE; - } else { - bitrate = Integer.parseInt(defaultBitrate) / 2; - } - VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { - @Override - public void onStart() { - progressDialog.show(); - } - - @Override - public void onProgress(float percent) { - progressDialog.setProgress((int) percent); - } - - @Override - public void onFinish(boolean result) { - if (result) { - uploadViewModel.uploadVideo(new File(outputVideoFile)); - } else { - StringHub.show(CommonCaseUploadActivity.this, "请先选择案卷类型"); - } - progressDialog.dismiss(); - } - }); - } - - /** - * 首次进入页面显示引导Popup - */ - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (isFirstEnter) { - TextView textView = new TextView(this); - int padding = QMUIDisplayHelper.dp2px(this, 10); - textView.setPadding(padding, padding, padding, padding); - textView.setGravity(Gravity.CENTER); - textView.setText("按住即可开始录音"); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(textView) - .shadow(true) - .arrow(true) - .animStyle(QMUIPopup.ANIM_AUTO) - .dimAmount(0.6f)//60%透明度 - .onDismiss(null) - .show(viewBinding.recodeAudioButton); - isFirstEnter = false; - } - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "2", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java deleted file mode 100644 index bec9609..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java +++ /dev/null @@ -1,225 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadPackageCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class PackageCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = PackageCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private UploadViewModel uploadViewModel; - private CaseViewModel caseViewModel; - private EditableImageAdapter imageAdapter; - private String gridId, shopID; - - private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String shopName = data.getStringExtra("shopName"); - shopID = data.getStringExtra("shopID"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - viewBinding.shopView.setText(shopName); - viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("三包上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", "三包上报"); - packageCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(shopKeeper)) { - StringHub.show(this, "店主名还未填写"); - return; - } - String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(phoneNumber)) { - StringHub.show(this, "电话号码还未填写"); - return; - } - if (StringHub.isPhoneNumber(phoneNumber)) { - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitShopCase("0", "0", longitude, latitude, - "2", "1", - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), - 0, 0, shopID, shopKeeper, phoneNumber); - } else { - StringHub.show(this, "电话号码格式不对"); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java deleted file mode 100644 index a75b868..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java +++ /dev/null @@ -1,361 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadQuickCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class QuickCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = QuickCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真是图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private EditableImageAdapter imageAdapter; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - - private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("快速上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //根据情况加载不同图层 - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - quickCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), "", "", 0, 0); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java deleted file mode 100644 index b680e8f..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.content.Context; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifiedDetailBinding; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.util.ArrayList; - -import cn.jzvd.Jzvd; - -public class CaseVerifiedDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifiedDetailActivity.this; - private CaseViewModel caseViewModel; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷详情"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String id = getIntent().getStringExtra(Constant.INTENT_PARAM); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - caseViewModel.obtainCaseDetail(id); - } - - @Override - protected void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //图片 - String verifyImages = data.getFileIdVerify(); - if (!TextUtils.isEmpty(verifyImages)) { - ArrayList urls = new ArrayList<>(); - String[] split = verifyImages.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int position, long l) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp( - videoUrl, - StringHub.filterSpaceOrEnter(data.getDescription()), - Jzvd.SCREEN_NORMAL - ); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - }); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - public void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java deleted file mode 100644 index 4a8a8ef..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java +++ /dev/null @@ -1,522 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifyDetailBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseNextNodeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseOperateViewModel; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CaseVerifyDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifyDetailActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private NodeViewModel nodeViewModel; - private CaseOperateViewModel operateViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private String id; - private String eorc; - private String typeCode; - private String typeDetailCode; - private String gridId;//可能来自案卷详情,也可能来自地图选点 - private double longitude, latitude; - private String changeState; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private EditableImageAdapter verifyImageAdapter; - - private final ActivityResultLauncher verifyCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - longitude = data.getDoubleExtra("longitude", 0); - latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String casePlace = data.getStringExtra("pos"); - viewBinding.caseCommunityView.setText(community); - if (TextUtils.isEmpty(casePlace)) { - viewBinding.casePlaceView.setText(community); - } else { - viewBinding.casePlaceView.setText(casePlace); - } - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷核实"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - id = getIntent().getStringExtra(Constant.INTENT_PARAM); - - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - nodeViewModel = new ViewModelProvider(this).get(NodeViewModel.class); - operateViewModel = new ViewModelProvider(this).get(CaseOperateViewModel.class); - - caseViewModel.obtainCaseDetail(id); - - verifyImageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(verifyImageAdapter); - } - - @Override - public void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - gridId = data.getGridId(); - String lng = data.getLng(); - if (!TextUtils.isEmpty(lng)) { - longitude = Double.parseDouble(lng); - } - String lat = data.getLat(); - if (!TextUtils.isEmpty(lat)) { - latitude = Double.parseDouble(lat); - } - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getCaseStateName().equals("") ? "无处理意见" : data.getCaseStateName()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //根据source判断是否能够修改案卷类型,11/12是公众号和热线电话,案卷类型可修改;否则不可修改 - int source = data.getSource(); - if (source != 11 && source != 12) { - viewBinding.caseTypeRightImage.setVisibility(View.GONE); - viewBinding.largeTypeRightImage.setVisibility(View.GONE); - viewBinding.smallTypeRightImage.setVisibility(View.GONE); - - viewBinding.caseClassLayout.setClickable(false); - viewBinding.caseLargeClassLayout.setClickable(false); - viewBinding.caseSmallClassLayout.setClickable(false); - } - - //图片 - String images = data.getFileIdVerify(); - if (!TextUtils.isEmpty(images)) { - ArrayList urls = new ArrayList<>(); - String[] split = images.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp(videoUrl, StringHub.filterSpaceOrEnter(data.getDescription()), Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseTypeView.setText(tag); - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() == 0) { - viewBinding.caseLargeTypeView.setText("无小类"); - } else { - viewBinding.caseLargeTypeView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallTypeView.setText("请选择"); - } - } - }); - - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeCode = largeTypeBeans.get(position).getTypeCode(); - - viewBinding.caseLargeTypeView.setText(tag); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - String typeId = dataBean.getId(); - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() == 0) { - viewBinding.caseSmallTypeView.setText("无小类"); - } else { - viewBinding.caseSmallTypeView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - } - } - } - }); - - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - - viewBinding.caseSmallTypeView.setText(tag); - } - }).build().show(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseTypeView.getText().toString(); - if (type.equals("请选择")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - int source = data.getSource(); - if (source == 11 || source == 12) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - verifyCaseLauncher.launch(intent); - } else { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - } - }); - - viewBinding.caseConditionLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - nodeViewModel.obtainNextNode(String.valueOf(data.getCaseState())); - } - }); - nodeViewModel.nodeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseNextNodeBean resultBean) { - if (resultBean.isSuccess()) { - List dataBeans = resultBean.getData(); - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("核实情况"); - for (CaseNextNodeBean.DataBean dataBean : dataBeans) { - sheetBuilder.addItem(dataBean.getNextOperation()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - - CaseNextNodeBean.DataBean dataBean = dataBeans.get(position); - viewBinding.caseConditionView.setText(dataBean.getNextOperation()); - changeState = String.valueOf(dataBean.getNextState()); - } - }).build().show(); - } else { - StringHub.show(context, "该案卷无下级流转节点"); - } - } - }); - - //图片九宫格事件处理 - verifyImageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - verifyImageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.isSuccess()) { - if (verifyImageAdapter.getItemCount() <= 3) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - verifyImageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - operateViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷核实中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "核实失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - private void submitCase() { - String remarks = viewBinding.caseConditionView.getText().toString(); - if (TextUtils.isEmpty(remarks)) { - StringHub.show(this, "核实意见不能为空"); - return; - } - if (TextUtils.isEmpty(changeState)) { - StringHub.show(this, "核实情况还未选择"); - return; - } - int source = data.getSource(); - if (source != 11 && source != 12) { - //修改案卷 - operateViewModel.checkCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList)); - } else { - //补全案卷 - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新选择"); - return; - } - String fieldIntro = viewBinding.casePlaceView.getText().toString(); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - } - if (longitude == 0 || latitude == 0) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - operateViewModel.verifyCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList), - eorc == null ? data.getEorc() : eorc, - typeCode == null ? data.getCasetypeCode() : typeCode, - typeDetailCode == null ? data.getCasetypeDetailCode() : typeDetailCode, - String.valueOf(longitude), String.valueOf(latitude), - "1", gridId.substring(0, 6), - gridId.substring(0, 9), data.getCommunityCode(), gridId, fieldIntro); - } - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java new file mode 100644 index 0000000..eec22e6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java @@ -0,0 +1,168 @@ +package com.casic.dcms.view.verify; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityVerifiedDetailBinding; +import com.casic.dcms.model.CaseDetailBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.MapHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.Constant; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; + +import cn.jzvd.Jzvd; + +public class VerifiedDetailActivity extends AndroidxBaseActivity { + + private final Context context = VerifiedDetailActivity.this; + private CaseViewModel caseViewModel; + private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷详情"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + @Override + protected void initData() { + String id = getIntent().getStringExtra(Constant.INTENT_PARAM); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.obtainCaseDetail(id); + caseViewModel.caseDetailModel.observe(this, new Observer() { + @Override + public void onChanged(CaseDetailBean resultBean) { + if (resultBean.getCode() == 200) { + data = resultBean.getData().get(0); + viewBinding.caseNumberView.setText(data.getCaseid()); + viewBinding.caseTypeView.setText(data.getEorcName()); + viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); + viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); + viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); + viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); + viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); + viewBinding.caseStartTimeView.setText(data.getCreateTime()); + viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); + viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); + + //图片 + String verifyImages = data.getFileIdVerify(); + if (!TextUtils.isEmpty(verifyImages)) { + ArrayList urls = new ArrayList<>(); + String[] split = verifyImages.split(","); + for (String s : split) { + if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { + urls.add(StringHelper.appendCompleteURL(s)); + } + } + ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); + imageAdapter.setImageList(urls); + viewBinding.imageGridView.setAdapter(imageAdapter); + //九宫格点击事件 + viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + if (urls.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); + } + } + }); + } + + //音频 + String audioFile = data.getAudioIdVerify(); + if (!TextUtils.isEmpty(audioFile)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); + } + + //视频 + String videoFile = data.getVideoIdVerify(); + if (!TextUtils.isEmpty(videoFile)) { + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + String videoUrl = StringHelper.appendCompleteURL(videoFile); + viewBinding.videoPlayerView.setUp( + videoUrl, + StringHub.filterSpaceOrEnter(data.getDescription()), + Jzvd.SCREEN_NORMAL + ); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(videoUrl) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + } + }); + } + + @Override + protected void initEvent() { + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); + } + }); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + public void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } + + @Override + protected void onDestroy() { + viewBinding.audioPlayerView.release(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java index d4b4b23..68dc3bc 100644 --- a/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java @@ -2,7 +2,6 @@ import android.widget.LinearLayout; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import com.casic.dcms.R; @@ -14,6 +13,7 @@ import com.casic.dcms.utils.LocaleConstant; import com.gyf.immersionbar.ImmersionBar; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -23,8 +23,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText("案卷核实"); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); @@ -41,10 +41,10 @@ fragmentList.add(new CaseVerifyFragment()); fragmentList.add(new CaseVerifiedFragment()); SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), LocaleConstant.CASE_PAGE_TITLES, fragmentList); - viewBinding.verifyViewPager.setAdapter(adapter); + viewBinding.viewPager.setAdapter(adapter); //绑定TabLayout - viewBinding.verifyTabLayout.setupWithViewPager(viewBinding.verifyViewPager); - LinearLayout linearLayout = (LinearLayout) viewBinding.verifyTabLayout.getChildAt(0); + viewBinding.topTabLayout.setupWithViewPager(viewBinding.viewPager); + LinearLayout linearLayout = (LinearLayout) viewBinding.topTabLayout.getChildAt(0); LinearLayoutHelper.setDivider(this, linearLayout); } diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifyDetailActivity.java new file mode 100644 index 0000000..207394d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifyDetailActivity.java @@ -0,0 +1,522 @@ +package com.casic.dcms.view.verify; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityVerifyDetailBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseDetailBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseNextNodeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.MapHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseOperateViewModel; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.NodeViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.Constant; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class VerifyDetailActivity extends AndroidxBaseActivity { + + private final Context context = VerifyDetailActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private NodeViewModel nodeViewModel; + private CaseOperateViewModel operateViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private String id; + private String eorc; + private String typeCode; + private String typeDetailCode; + private String gridId;//可能来自案卷详情,也可能来自地图选点 + private double longitude, latitude; + private String changeState; + private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); + private EditableImageAdapter verifyImageAdapter; + + private final ActivityResultLauncher verifyCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + longitude = data.getDoubleExtra("longitude", 0); + latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String casePlace = data.getStringExtra("pos"); + viewBinding.caseCommunityView.setText(community); + if (TextUtils.isEmpty(casePlace)) { + viewBinding.casePlaceView.setText(community); + } else { + viewBinding.casePlaceView.setText(casePlace); + } + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷核实"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + id = getIntent().getStringExtra(Constant.INTENT_PARAM); + + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + nodeViewModel = new ViewModelProvider(this).get(NodeViewModel.class); + operateViewModel = new ViewModelProvider(this).get(CaseOperateViewModel.class); + + caseViewModel.obtainCaseDetail(id); + + verifyImageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(verifyImageAdapter); + } + + @Override + public void initEvent() { + caseViewModel.caseDetailModel.observe(this, new Observer() { + @Override + public void onChanged(CaseDetailBean resultBean) { + if (resultBean.getCode() == 200) { + data = resultBean.getData().get(0); + gridId = data.getGridId(); + String lng = data.getLng(); + if (!TextUtils.isEmpty(lng)) { + longitude = Double.parseDouble(lng); + } + String lat = data.getLat(); + if (!TextUtils.isEmpty(lat)) { + latitude = Double.parseDouble(lat); + } + viewBinding.caseNumberView.setText(data.getCaseid()); + viewBinding.caseTypeView.setText(data.getEorcName()); + viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); + viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); + viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); + viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); + viewBinding.caseHandleView.setText(data.getCaseStateName().equals("") ? "无处理意见" : data.getCaseStateName()); + viewBinding.caseStartTimeView.setText(data.getCreateTime()); + viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); + viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); + + //根据source判断是否能够修改案卷类型,11/12是公众号和热线电话,案卷类型可修改;否则不可修改 + int source = data.getSource(); + if (source != 11 && source != 12) { + viewBinding.caseTypeRightImage.setVisibility(View.GONE); + viewBinding.largeTypeRightImage.setVisibility(View.GONE); + viewBinding.smallTypeRightImage.setVisibility(View.GONE); + + viewBinding.caseClassLayout.setClickable(false); + viewBinding.caseLargeClassLayout.setClickable(false); + viewBinding.caseSmallClassLayout.setClickable(false); + } + + //图片 + String images = data.getFileIdVerify(); + if (!TextUtils.isEmpty(images)) { + ArrayList urls = new ArrayList<>(); + String[] split = images.split(","); + for (String s : split) { + if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { + urls.add(StringHelper.appendCompleteURL(s)); + } + } + ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); + imageAdapter.setImageList(urls); + viewBinding.imageGridView.setAdapter(imageAdapter); + //九宫格点击事件 + viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (urls.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); + } + } + }); + } + + //音频 + String audioFile = data.getAudioIdVerify(); + if (!TextUtils.isEmpty(audioFile)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); + } + + //视频 + String videoFile = data.getVideoIdVerify(); + if (!TextUtils.isEmpty(videoFile)) { + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + String videoUrl = StringHelper.appendCompleteURL(videoFile); + viewBinding.videoPlayerView.setUp(videoUrl, StringHub.filterSpaceOrEnter(data.getDescription()), Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(videoUrl) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseTypeView.setText(tag); + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() == 0) { + viewBinding.caseLargeTypeView.setText("无小类"); + } else { + viewBinding.caseLargeTypeView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallTypeView.setText("请选择"); + } + } + }); + + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + typeCode = largeTypeBeans.get(position).getTypeCode(); + + viewBinding.caseLargeTypeView.setText(tag); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() == 0) { + viewBinding.caseSmallTypeView.setText("无小类"); + } else { + viewBinding.caseSmallTypeView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + } + } + } + }); + + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + + viewBinding.caseSmallTypeView.setText(tag); + } + }).build().show(); + } + } + }); + + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseTypeView.getText().toString(); + if (type.equals("请选择")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + int source = data.getSource(); + if (source == 11 || source == 12) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + verifyCaseLauncher.launch(intent); + } else { + MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); + } + } + }); + + viewBinding.caseConditionLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + nodeViewModel.obtainNextNode(String.valueOf(data.getCaseState())); + } + }); + nodeViewModel.nodeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseNextNodeBean resultBean) { + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("核实情况"); + for (CaseNextNodeBean.DataBean dataBean : dataBeans) { + sheetBuilder.addItem(dataBean.getNextOperation()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + CaseNextNodeBean.DataBean dataBean = dataBeans.get(position); + viewBinding.caseConditionView.setText(dataBean.getNextOperation()); + changeState = String.valueOf(dataBean.getNextState()); + } + }).build().show(); + } else { + StringHub.show(context, "该案卷无下级流转节点"); + } + } + }); + + //图片九宫格事件处理 + verifyImageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + verifyImageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.isSuccess()) { + if (verifyImageAdapter.getItemCount() <= 3) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + verifyImageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + operateViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷核实中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "核实失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + private void submitCase() { + String remarks = viewBinding.caseConditionView.getText().toString(); + if (TextUtils.isEmpty(remarks)) { + StringHub.show(this, "核实意见不能为空"); + return; + } + if (TextUtils.isEmpty(changeState)) { + StringHub.show(this, "核实情况还未选择"); + return; + } + int source = data.getSource(); + if (source != 11 && source != 12) { + //修改案卷 + operateViewModel.checkCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), + changeState, remarks, StringHelper.reformatURL(imageList)); + } else { + //补全案卷 + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新选择"); + return; + } + String fieldIntro = viewBinding.casePlaceView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + } + if (longitude == 0 || latitude == 0) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + operateViewModel.verifyCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), + changeState, remarks, StringHelper.reformatURL(imageList), + eorc == null ? data.getEorc() : eorc, + typeCode == null ? data.getCasetypeCode() : typeCode, + typeDetailCode == null ? data.getCasetypeDetailCode() : typeDetailCode, + String.valueOf(longitude), String.valueOf(latitude), + "1", gridId.substring(0, 6), + gridId.substring(0, 9), data.getCommunityCode(), gridId, fieldIntro); + } + } + + @Override + protected void onDestroy() { + viewBinding.audioPlayerView.release(); + super.onDestroy(); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} diff --git a/app/src/main/java/com/casic/dcms/vm/CaseViewModel.java b/app/src/main/java/com/casic/dcms/vm/CaseViewModel.java index 92ec1d7..5f58648 100644 --- a/app/src/main/java/com/casic/dcms/vm/CaseViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/CaseViewModel.java @@ -9,9 +9,9 @@ import com.casic.dcms.model.OvertimeCaseBean; import com.casic.dcms.model.PackageCaseBean; import com.casic.dcms.model.UrgentCaseBean; +import com.casic.dcms.model.VerifiedCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.casic.dcms.model.verify.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java new file mode 100644 index 0000000..c2a889b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java @@ -0,0 +1,635 @@ +package com.casic.dcms.view.upload; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCommonCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; +import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.zolad.videoslimmer.VideoSlimmer; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class CommonCaseActivity extends AndroidxBaseActivity { + + private static final String TAG = "CommonCaseActivity"; + private final Context context = CommonCaseActivity.this; + private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private ProgressDialog progressDialog; + private EditableImageAdapter imageAdapter; + private AudioRecodeHelper audioRecodeHelper; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + private String audioUrl, videoUrl; + private boolean isFirstEnter = true; + + private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("视频压缩中..."); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); + progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); + + /** + * 计算 +图标 大小 + * + * CarrView水平外边距5dp + * RelativeLayout水平内边距10dp + * RecyclerView左边距100dp + * */ + int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); + int margins = FloatHub.dp2px(this, 3); + int itemSize = (realWidth - 4 * margins) / 3; + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); + params.setMargins(margins, margins, margins, margins); + params.gravity = Gravity.LEFT; + viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); + viewBinding.addVideoView.setLayoutParams(params); + + //图片九宫格 + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + uploadCaseLauncher.launch(intent); + } + }); + + /** + * 案卷录音 + * */ + AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { + @Override + public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { + viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); + audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseActivity.this).toString()); + break; + case MotionEvent.ACTION_UP: + audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) + window.dismiss(); + viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); + break; + } + return true; + } + }); + + audioRecodeHelper = new AudioRecodeHelper(); + audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { + @Override + public void onUpdate(double db, long time) { + imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); + textView.setText(LongHub.millsToTime(time)); + } + + @Override + public void onStop(String filePath) { + uploadViewModel.uploadAudio(new File(filePath)); + } + }); + } + }); + + /** + * 案卷视频 + * */ + viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PictureSelectorHelper.takeVideo(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + LocalMedia media = result.get(0); + //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" + //需要手动压缩视频 + String mediaRealPath = media.getRealPath(); + if (TextUtils.isEmpty(mediaRealPath)) { + //部分手机getRealPath可能为空,需要备用路径 + mediaRealPath = media.getPath(); + } + if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { + //如果默认和备用路径还是为空,则不压缩上传 + StringHub.show(context, "请先选择案卷类型"); + return; + } + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(mediaRealPath); + String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); + + assert defaultRotation != null; + compressVideo(mediaRealPath, defaultRotation, defaultBitrate); + } + }); + } + }); + + /** + * 重拍视频 + * */ + viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (viewBinding.videoPlayerView.isShown()) { + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("确定重新拍摄视频材料?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + viewBinding.videoPlayerView.setVisibility(View.GONE); + viewBinding.addVideoView.setVisibility(View.VISIBLE); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + } + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.audioModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + audioUrl = resultBean.getData(); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + if (!TextUtils.isEmpty(audioUrl)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); + } + } + } + }); + uploadViewModel.videoModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 + viewBinding.addVideoView.setVisibility(View.GONE); + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + videoUrl = resultBean.getData(); + String completeURL = StringHelper.appendCompleteURL(videoUrl); + viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(completeURL) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 6.0以上视频压缩 + */ + private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { + Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); + String outputVideoFile = FileUtils.getOutputVideoFile(); + int width, height, bitrate; + if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 + width = LocaleConstant.DEFAULT_WIDTH / 2; + height = LocaleConstant.DEFAULT_HEIGHT / 2; + } else { + width = LocaleConstant.DEFAULT_HEIGHT / 2; + height = LocaleConstant.DEFAULT_WIDTH / 2; + } + if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { + bitrate = LocaleConstant.BITRATE; + } else { + bitrate = Integer.parseInt(defaultBitrate) / 2; + } + VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { + @Override + public void onStart() { + progressDialog.show(); + } + + @Override + public void onProgress(float percent) { + progressDialog.setProgress((int) percent); + } + + @Override + public void onFinish(boolean result) { + if (result) { + uploadViewModel.uploadVideo(new File(outputVideoFile)); + } else { + StringHub.show(CommonCaseActivity.this, "请先选择案卷类型"); + } + progressDialog.dismiss(); + } + }); + } + + /** + * 首次进入页面显示引导Popup + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (isFirstEnter) { + TextView textView = new TextView(this); + int padding = QMUIDisplayHelper.dp2px(this, 10); + textView.setPadding(padding, padding, padding, padding); + textView.setGravity(Gravity.CENTER); + textView.setText("按住即可开始录音"); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(textView) + .shadow(true) + .arrow(true) + .animStyle(QMUIPopup.ANIM_AUTO) + .dimAmount(0.6f)//60%透明度 + .onDismiss(null) + .show(viewBinding.recodeAudioButton); + isFirstEnter = false; + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "2", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java deleted file mode 100644 index 9b96c13..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.media.MediaMetadataRetriever; -import android.text.TextUtils; -import android.util.Log; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadCommonCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.FileUtils; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.FloatHub; -import com.pengxh.androidx.lite.hub.LongHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; -import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; -import com.zolad.videoslimmer.VideoSlimmer; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CommonCaseUploadActivity extends AndroidxBaseActivity { - - private static final String TAG = "CaseUploadActivity"; - private final Context context = CommonCaseUploadActivity.this; - private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private ProgressDialog progressDialog; - private EditableImageAdapter imageAdapter; - private AudioRecodeHelper audioRecodeHelper; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - private String audioUrl, videoUrl; - private boolean isFirstEnter = true; - - private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - progressDialog = new ProgressDialog(this); - progressDialog.setMessage("视频压缩中..."); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); - progressDialog.setCancelable(false); - progressDialog.setCanceledOnTouchOutside(false); - - /** - * 计算 +图标 大小 - * - * CarrView水平外边距5dp - * RelativeLayout水平内边距10dp - * RecyclerView左边距100dp - * */ - int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); - int margins = FloatHub.dp2px(this, 3); - int itemSize = (realWidth - 4 * margins) / 3; - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); - params.setMargins(margins, margins, margins, margins); - params.gravity = Gravity.LEFT; - viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); - viewBinding.addVideoView.setLayoutParams(params); - - //图片九宫格 - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - uploadCaseLauncher.launch(intent); - } - }); - - /** - * 案卷录音 - * */ - AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { - @Override - public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { - viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); - window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); - audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseUploadActivity.this).toString()); - break; - case MotionEvent.ACTION_UP: - audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) - window.dismiss(); - viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); - break; - } - return true; - } - }); - - audioRecodeHelper = new AudioRecodeHelper(); - audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { - @Override - public void onUpdate(double db, long time) { - imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); - textView.setText(LongHub.millsToTime(time)); - } - - @Override - public void onStop(String filePath) { - uploadViewModel.uploadAudio(new File(filePath)); - } - }); - } - }); - - /** - * 案卷视频 - * */ - viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PictureSelectorHelper.takeVideo(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - LocalMedia media = result.get(0); - //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" - //需要手动压缩视频 - String mediaRealPath = media.getRealPath(); - if (TextUtils.isEmpty(mediaRealPath)) { - //部分手机getRealPath可能为空,需要备用路径 - mediaRealPath = media.getPath(); - } - if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { - //如果默认和备用路径还是为空,则不压缩上传 - StringHub.show(context, "请先选择案卷类型"); - return; - } - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(mediaRealPath); - String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); - String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); - - assert defaultRotation != null; - compressVideo(mediaRealPath, defaultRotation, defaultBitrate); - } - }); - } - }); - - /** - * 重拍视频 - * */ - viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (viewBinding.videoPlayerView.isShown()) { - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("确定重新拍摄视频材料?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - viewBinding.videoPlayerView.setVisibility(View.GONE); - viewBinding.addVideoView.setVisibility(View.VISIBLE); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - } - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.audioModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - audioUrl = resultBean.getData(); - /** - * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a - * */ - if (!TextUtils.isEmpty(audioUrl)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); - } - } - } - }); - uploadViewModel.videoModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 - viewBinding.addVideoView.setVisibility(View.GONE); - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - videoUrl = resultBean.getData(); - String completeURL = StringHelper.appendCompleteURL(videoUrl); - viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(completeURL) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 6.0以上视频压缩 - */ - private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { - Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); - String outputVideoFile = FileUtils.getOutputVideoFile(); - int width, height, bitrate; - if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 - width = LocaleConstant.DEFAULT_WIDTH / 2; - height = LocaleConstant.DEFAULT_HEIGHT / 2; - } else { - width = LocaleConstant.DEFAULT_HEIGHT / 2; - height = LocaleConstant.DEFAULT_WIDTH / 2; - } - if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { - bitrate = LocaleConstant.BITRATE; - } else { - bitrate = Integer.parseInt(defaultBitrate) / 2; - } - VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { - @Override - public void onStart() { - progressDialog.show(); - } - - @Override - public void onProgress(float percent) { - progressDialog.setProgress((int) percent); - } - - @Override - public void onFinish(boolean result) { - if (result) { - uploadViewModel.uploadVideo(new File(outputVideoFile)); - } else { - StringHub.show(CommonCaseUploadActivity.this, "请先选择案卷类型"); - } - progressDialog.dismiss(); - } - }); - } - - /** - * 首次进入页面显示引导Popup - */ - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (isFirstEnter) { - TextView textView = new TextView(this); - int padding = QMUIDisplayHelper.dp2px(this, 10); - textView.setPadding(padding, padding, padding, padding); - textView.setGravity(Gravity.CENTER); - textView.setText("按住即可开始录音"); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(textView) - .shadow(true) - .arrow(true) - .animStyle(QMUIPopup.ANIM_AUTO) - .dimAmount(0.6f)//60%透明度 - .onDismiss(null) - .show(viewBinding.recodeAudioButton); - isFirstEnter = false; - } - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "2", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java deleted file mode 100644 index bec9609..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java +++ /dev/null @@ -1,225 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadPackageCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class PackageCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = PackageCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private UploadViewModel uploadViewModel; - private CaseViewModel caseViewModel; - private EditableImageAdapter imageAdapter; - private String gridId, shopID; - - private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String shopName = data.getStringExtra("shopName"); - shopID = data.getStringExtra("shopID"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - viewBinding.shopView.setText(shopName); - viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("三包上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", "三包上报"); - packageCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(shopKeeper)) { - StringHub.show(this, "店主名还未填写"); - return; - } - String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(phoneNumber)) { - StringHub.show(this, "电话号码还未填写"); - return; - } - if (StringHub.isPhoneNumber(phoneNumber)) { - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitShopCase("0", "0", longitude, latitude, - "2", "1", - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), - 0, 0, shopID, shopKeeper, phoneNumber); - } else { - StringHub.show(this, "电话号码格式不对"); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java deleted file mode 100644 index a75b868..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java +++ /dev/null @@ -1,361 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadQuickCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class QuickCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = QuickCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真是图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private EditableImageAdapter imageAdapter; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - - private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("快速上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //根据情况加载不同图层 - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - quickCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), "", "", 0, 0); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java deleted file mode 100644 index b680e8f..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.content.Context; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifiedDetailBinding; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.util.ArrayList; - -import cn.jzvd.Jzvd; - -public class CaseVerifiedDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifiedDetailActivity.this; - private CaseViewModel caseViewModel; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷详情"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String id = getIntent().getStringExtra(Constant.INTENT_PARAM); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - caseViewModel.obtainCaseDetail(id); - } - - @Override - protected void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //图片 - String verifyImages = data.getFileIdVerify(); - if (!TextUtils.isEmpty(verifyImages)) { - ArrayList urls = new ArrayList<>(); - String[] split = verifyImages.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int position, long l) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp( - videoUrl, - StringHub.filterSpaceOrEnter(data.getDescription()), - Jzvd.SCREEN_NORMAL - ); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - }); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - public void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java deleted file mode 100644 index 4a8a8ef..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java +++ /dev/null @@ -1,522 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifyDetailBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseNextNodeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseOperateViewModel; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CaseVerifyDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifyDetailActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private NodeViewModel nodeViewModel; - private CaseOperateViewModel operateViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private String id; - private String eorc; - private String typeCode; - private String typeDetailCode; - private String gridId;//可能来自案卷详情,也可能来自地图选点 - private double longitude, latitude; - private String changeState; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private EditableImageAdapter verifyImageAdapter; - - private final ActivityResultLauncher verifyCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - longitude = data.getDoubleExtra("longitude", 0); - latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String casePlace = data.getStringExtra("pos"); - viewBinding.caseCommunityView.setText(community); - if (TextUtils.isEmpty(casePlace)) { - viewBinding.casePlaceView.setText(community); - } else { - viewBinding.casePlaceView.setText(casePlace); - } - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷核实"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - id = getIntent().getStringExtra(Constant.INTENT_PARAM); - - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - nodeViewModel = new ViewModelProvider(this).get(NodeViewModel.class); - operateViewModel = new ViewModelProvider(this).get(CaseOperateViewModel.class); - - caseViewModel.obtainCaseDetail(id); - - verifyImageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(verifyImageAdapter); - } - - @Override - public void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - gridId = data.getGridId(); - String lng = data.getLng(); - if (!TextUtils.isEmpty(lng)) { - longitude = Double.parseDouble(lng); - } - String lat = data.getLat(); - if (!TextUtils.isEmpty(lat)) { - latitude = Double.parseDouble(lat); - } - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getCaseStateName().equals("") ? "无处理意见" : data.getCaseStateName()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //根据source判断是否能够修改案卷类型,11/12是公众号和热线电话,案卷类型可修改;否则不可修改 - int source = data.getSource(); - if (source != 11 && source != 12) { - viewBinding.caseTypeRightImage.setVisibility(View.GONE); - viewBinding.largeTypeRightImage.setVisibility(View.GONE); - viewBinding.smallTypeRightImage.setVisibility(View.GONE); - - viewBinding.caseClassLayout.setClickable(false); - viewBinding.caseLargeClassLayout.setClickable(false); - viewBinding.caseSmallClassLayout.setClickable(false); - } - - //图片 - String images = data.getFileIdVerify(); - if (!TextUtils.isEmpty(images)) { - ArrayList urls = new ArrayList<>(); - String[] split = images.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp(videoUrl, StringHub.filterSpaceOrEnter(data.getDescription()), Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseTypeView.setText(tag); - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() == 0) { - viewBinding.caseLargeTypeView.setText("无小类"); - } else { - viewBinding.caseLargeTypeView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallTypeView.setText("请选择"); - } - } - }); - - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeCode = largeTypeBeans.get(position).getTypeCode(); - - viewBinding.caseLargeTypeView.setText(tag); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - String typeId = dataBean.getId(); - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() == 0) { - viewBinding.caseSmallTypeView.setText("无小类"); - } else { - viewBinding.caseSmallTypeView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - } - } - } - }); - - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - - viewBinding.caseSmallTypeView.setText(tag); - } - }).build().show(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseTypeView.getText().toString(); - if (type.equals("请选择")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - int source = data.getSource(); - if (source == 11 || source == 12) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - verifyCaseLauncher.launch(intent); - } else { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - } - }); - - viewBinding.caseConditionLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - nodeViewModel.obtainNextNode(String.valueOf(data.getCaseState())); - } - }); - nodeViewModel.nodeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseNextNodeBean resultBean) { - if (resultBean.isSuccess()) { - List dataBeans = resultBean.getData(); - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("核实情况"); - for (CaseNextNodeBean.DataBean dataBean : dataBeans) { - sheetBuilder.addItem(dataBean.getNextOperation()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - - CaseNextNodeBean.DataBean dataBean = dataBeans.get(position); - viewBinding.caseConditionView.setText(dataBean.getNextOperation()); - changeState = String.valueOf(dataBean.getNextState()); - } - }).build().show(); - } else { - StringHub.show(context, "该案卷无下级流转节点"); - } - } - }); - - //图片九宫格事件处理 - verifyImageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - verifyImageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.isSuccess()) { - if (verifyImageAdapter.getItemCount() <= 3) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - verifyImageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - operateViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷核实中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "核实失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - private void submitCase() { - String remarks = viewBinding.caseConditionView.getText().toString(); - if (TextUtils.isEmpty(remarks)) { - StringHub.show(this, "核实意见不能为空"); - return; - } - if (TextUtils.isEmpty(changeState)) { - StringHub.show(this, "核实情况还未选择"); - return; - } - int source = data.getSource(); - if (source != 11 && source != 12) { - //修改案卷 - operateViewModel.checkCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList)); - } else { - //补全案卷 - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新选择"); - return; - } - String fieldIntro = viewBinding.casePlaceView.getText().toString(); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - } - if (longitude == 0 || latitude == 0) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - operateViewModel.verifyCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList), - eorc == null ? data.getEorc() : eorc, - typeCode == null ? data.getCasetypeCode() : typeCode, - typeDetailCode == null ? data.getCasetypeDetailCode() : typeDetailCode, - String.valueOf(longitude), String.valueOf(latitude), - "1", gridId.substring(0, 6), - gridId.substring(0, 9), data.getCommunityCode(), gridId, fieldIntro); - } - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java new file mode 100644 index 0000000..eec22e6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java @@ -0,0 +1,168 @@ +package com.casic.dcms.view.verify; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityVerifiedDetailBinding; +import com.casic.dcms.model.CaseDetailBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.MapHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.Constant; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; + +import cn.jzvd.Jzvd; + +public class VerifiedDetailActivity extends AndroidxBaseActivity { + + private final Context context = VerifiedDetailActivity.this; + private CaseViewModel caseViewModel; + private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷详情"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + @Override + protected void initData() { + String id = getIntent().getStringExtra(Constant.INTENT_PARAM); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.obtainCaseDetail(id); + caseViewModel.caseDetailModel.observe(this, new Observer() { + @Override + public void onChanged(CaseDetailBean resultBean) { + if (resultBean.getCode() == 200) { + data = resultBean.getData().get(0); + viewBinding.caseNumberView.setText(data.getCaseid()); + viewBinding.caseTypeView.setText(data.getEorcName()); + viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); + viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); + viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); + viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); + viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); + viewBinding.caseStartTimeView.setText(data.getCreateTime()); + viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); + viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); + + //图片 + String verifyImages = data.getFileIdVerify(); + if (!TextUtils.isEmpty(verifyImages)) { + ArrayList urls = new ArrayList<>(); + String[] split = verifyImages.split(","); + for (String s : split) { + if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { + urls.add(StringHelper.appendCompleteURL(s)); + } + } + ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); + imageAdapter.setImageList(urls); + viewBinding.imageGridView.setAdapter(imageAdapter); + //九宫格点击事件 + viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + if (urls.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); + } + } + }); + } + + //音频 + String audioFile = data.getAudioIdVerify(); + if (!TextUtils.isEmpty(audioFile)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); + } + + //视频 + String videoFile = data.getVideoIdVerify(); + if (!TextUtils.isEmpty(videoFile)) { + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + String videoUrl = StringHelper.appendCompleteURL(videoFile); + viewBinding.videoPlayerView.setUp( + videoUrl, + StringHub.filterSpaceOrEnter(data.getDescription()), + Jzvd.SCREEN_NORMAL + ); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(videoUrl) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + } + }); + } + + @Override + protected void initEvent() { + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); + } + }); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + public void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } + + @Override + protected void onDestroy() { + viewBinding.audioPlayerView.release(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java index d4b4b23..68dc3bc 100644 --- a/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java @@ -2,7 +2,6 @@ import android.widget.LinearLayout; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import com.casic.dcms.R; @@ -14,6 +13,7 @@ import com.casic.dcms.utils.LocaleConstant; import com.gyf.immersionbar.ImmersionBar; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -23,8 +23,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText("案卷核实"); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); @@ -41,10 +41,10 @@ fragmentList.add(new CaseVerifyFragment()); fragmentList.add(new CaseVerifiedFragment()); SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), LocaleConstant.CASE_PAGE_TITLES, fragmentList); - viewBinding.verifyViewPager.setAdapter(adapter); + viewBinding.viewPager.setAdapter(adapter); //绑定TabLayout - viewBinding.verifyTabLayout.setupWithViewPager(viewBinding.verifyViewPager); - LinearLayout linearLayout = (LinearLayout) viewBinding.verifyTabLayout.getChildAt(0); + viewBinding.topTabLayout.setupWithViewPager(viewBinding.viewPager); + LinearLayout linearLayout = (LinearLayout) viewBinding.topTabLayout.getChildAt(0); LinearLayoutHelper.setDivider(this, linearLayout); } diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifyDetailActivity.java new file mode 100644 index 0000000..207394d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifyDetailActivity.java @@ -0,0 +1,522 @@ +package com.casic.dcms.view.verify; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityVerifyDetailBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseDetailBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseNextNodeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.MapHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseOperateViewModel; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.NodeViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.Constant; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class VerifyDetailActivity extends AndroidxBaseActivity { + + private final Context context = VerifyDetailActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private NodeViewModel nodeViewModel; + private CaseOperateViewModel operateViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private String id; + private String eorc; + private String typeCode; + private String typeDetailCode; + private String gridId;//可能来自案卷详情,也可能来自地图选点 + private double longitude, latitude; + private String changeState; + private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); + private EditableImageAdapter verifyImageAdapter; + + private final ActivityResultLauncher verifyCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + longitude = data.getDoubleExtra("longitude", 0); + latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String casePlace = data.getStringExtra("pos"); + viewBinding.caseCommunityView.setText(community); + if (TextUtils.isEmpty(casePlace)) { + viewBinding.casePlaceView.setText(community); + } else { + viewBinding.casePlaceView.setText(casePlace); + } + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷核实"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + id = getIntent().getStringExtra(Constant.INTENT_PARAM); + + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + nodeViewModel = new ViewModelProvider(this).get(NodeViewModel.class); + operateViewModel = new ViewModelProvider(this).get(CaseOperateViewModel.class); + + caseViewModel.obtainCaseDetail(id); + + verifyImageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(verifyImageAdapter); + } + + @Override + public void initEvent() { + caseViewModel.caseDetailModel.observe(this, new Observer() { + @Override + public void onChanged(CaseDetailBean resultBean) { + if (resultBean.getCode() == 200) { + data = resultBean.getData().get(0); + gridId = data.getGridId(); + String lng = data.getLng(); + if (!TextUtils.isEmpty(lng)) { + longitude = Double.parseDouble(lng); + } + String lat = data.getLat(); + if (!TextUtils.isEmpty(lat)) { + latitude = Double.parseDouble(lat); + } + viewBinding.caseNumberView.setText(data.getCaseid()); + viewBinding.caseTypeView.setText(data.getEorcName()); + viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); + viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); + viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); + viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); + viewBinding.caseHandleView.setText(data.getCaseStateName().equals("") ? "无处理意见" : data.getCaseStateName()); + viewBinding.caseStartTimeView.setText(data.getCreateTime()); + viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); + viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); + + //根据source判断是否能够修改案卷类型,11/12是公众号和热线电话,案卷类型可修改;否则不可修改 + int source = data.getSource(); + if (source != 11 && source != 12) { + viewBinding.caseTypeRightImage.setVisibility(View.GONE); + viewBinding.largeTypeRightImage.setVisibility(View.GONE); + viewBinding.smallTypeRightImage.setVisibility(View.GONE); + + viewBinding.caseClassLayout.setClickable(false); + viewBinding.caseLargeClassLayout.setClickable(false); + viewBinding.caseSmallClassLayout.setClickable(false); + } + + //图片 + String images = data.getFileIdVerify(); + if (!TextUtils.isEmpty(images)) { + ArrayList urls = new ArrayList<>(); + String[] split = images.split(","); + for (String s : split) { + if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { + urls.add(StringHelper.appendCompleteURL(s)); + } + } + ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); + imageAdapter.setImageList(urls); + viewBinding.imageGridView.setAdapter(imageAdapter); + //九宫格点击事件 + viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (urls.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); + } + } + }); + } + + //音频 + String audioFile = data.getAudioIdVerify(); + if (!TextUtils.isEmpty(audioFile)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); + } + + //视频 + String videoFile = data.getVideoIdVerify(); + if (!TextUtils.isEmpty(videoFile)) { + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + String videoUrl = StringHelper.appendCompleteURL(videoFile); + viewBinding.videoPlayerView.setUp(videoUrl, StringHub.filterSpaceOrEnter(data.getDescription()), Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(videoUrl) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseTypeView.setText(tag); + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() == 0) { + viewBinding.caseLargeTypeView.setText("无小类"); + } else { + viewBinding.caseLargeTypeView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallTypeView.setText("请选择"); + } + } + }); + + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + typeCode = largeTypeBeans.get(position).getTypeCode(); + + viewBinding.caseLargeTypeView.setText(tag); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() == 0) { + viewBinding.caseSmallTypeView.setText("无小类"); + } else { + viewBinding.caseSmallTypeView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + } + } + } + }); + + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + + viewBinding.caseSmallTypeView.setText(tag); + } + }).build().show(); + } + } + }); + + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseTypeView.getText().toString(); + if (type.equals("请选择")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + int source = data.getSource(); + if (source == 11 || source == 12) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + verifyCaseLauncher.launch(intent); + } else { + MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); + } + } + }); + + viewBinding.caseConditionLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + nodeViewModel.obtainNextNode(String.valueOf(data.getCaseState())); + } + }); + nodeViewModel.nodeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseNextNodeBean resultBean) { + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("核实情况"); + for (CaseNextNodeBean.DataBean dataBean : dataBeans) { + sheetBuilder.addItem(dataBean.getNextOperation()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + CaseNextNodeBean.DataBean dataBean = dataBeans.get(position); + viewBinding.caseConditionView.setText(dataBean.getNextOperation()); + changeState = String.valueOf(dataBean.getNextState()); + } + }).build().show(); + } else { + StringHub.show(context, "该案卷无下级流转节点"); + } + } + }); + + //图片九宫格事件处理 + verifyImageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + verifyImageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.isSuccess()) { + if (verifyImageAdapter.getItemCount() <= 3) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + verifyImageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + operateViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷核实中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "核实失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + private void submitCase() { + String remarks = viewBinding.caseConditionView.getText().toString(); + if (TextUtils.isEmpty(remarks)) { + StringHub.show(this, "核实意见不能为空"); + return; + } + if (TextUtils.isEmpty(changeState)) { + StringHub.show(this, "核实情况还未选择"); + return; + } + int source = data.getSource(); + if (source != 11 && source != 12) { + //修改案卷 + operateViewModel.checkCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), + changeState, remarks, StringHelper.reformatURL(imageList)); + } else { + //补全案卷 + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新选择"); + return; + } + String fieldIntro = viewBinding.casePlaceView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + } + if (longitude == 0 || latitude == 0) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + operateViewModel.verifyCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), + changeState, remarks, StringHelper.reformatURL(imageList), + eorc == null ? data.getEorc() : eorc, + typeCode == null ? data.getCasetypeCode() : typeCode, + typeDetailCode == null ? data.getCasetypeDetailCode() : typeDetailCode, + String.valueOf(longitude), String.valueOf(latitude), + "1", gridId.substring(0, 6), + gridId.substring(0, 9), data.getCommunityCode(), gridId, fieldIntro); + } + } + + @Override + protected void onDestroy() { + viewBinding.audioPlayerView.release(); + super.onDestroy(); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} diff --git a/app/src/main/java/com/casic/dcms/vm/CaseViewModel.java b/app/src/main/java/com/casic/dcms/vm/CaseViewModel.java index 92ec1d7..5f58648 100644 --- a/app/src/main/java/com/casic/dcms/vm/CaseViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/CaseViewModel.java @@ -9,9 +9,9 @@ import com.casic.dcms.model.OvertimeCaseBean; import com.casic.dcms.model.PackageCaseBean; import com.casic.dcms.model.UrgentCaseBean; +import com.casic.dcms.model.VerifiedCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.casic.dcms.model.verify.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; diff --git a/app/src/main/res/drawable/ic_left_black.xml b/app/src/main/res/drawable/ic_left_black.xml new file mode 100644 index 0000000..a9f9898 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_black.xml @@ -0,0 +1,9 @@ + + + diff --git a/.idea/misc.xml b/.idea/misc.xml index 4f8b20d..071931a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -127,6 +127,8 @@ + + @@ -139,6 +141,8 @@ + + @@ -161,6 +165,7 @@ + @@ -187,12 +192,13 @@ - + + @@ -232,11 +238,14 @@ + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5de3040..b6a8d08 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -57,12 +57,12 @@ - - - + + + - - + + @@ -85,6 +85,11 @@ + + + + + @@ -94,19 +99,14 @@ - - - - - diff --git a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java index 3c7c8c4..22a7cd9 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CaseHandledListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java index 2fcfb2b..254f0cd 100644 --- a/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/CheckCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java index 281af8c..eff9e34 100644 --- a/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/HandleCaseListAdapter.java @@ -35,7 +35,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java index 1b191fd..e356195 100644 --- a/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/OvertimeCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java index fe6bcf6..a48e315 100644 --- a/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/UrgentCaseListAdapter.java @@ -30,7 +30,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java index dfedccc..651a3f7 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAdjustAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java index 37704d2..63c9840 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptAuthorizeAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java index d6390bd..dd8bf81 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptDelayedAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java index b47ef50..6f39c1d 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandleAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java index 87229f6..0a4d3d0 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptHandledAdapter.java @@ -33,7 +33,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java index 249bd0b..c468d23 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptPostAdapter.java @@ -32,7 +32,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java index a30a527..32f75bb 100644 --- a/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java +++ b/app/src/main/java/com/casic/dcms/adapter/dept/DeptTodoAdapter.java @@ -37,7 +37,7 @@ @NonNull @Override public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); + return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv_l, parent, false)); } @Override diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java deleted file mode 100644 index 1ef38ba..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifiedCaseListAdapter.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.pengxh.androidx.lite.hub.StringHub; - -import java.util.List; - -public class VerifiedCaseListAdapter extends RecyclerView.Adapter { - -// private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifiedCaseListAdapter(Context context, List dataRows) { -// this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - -// private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); -// caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifiedCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 -// String fileIdVerify = rowsBean.getFileIdVerify(); -// if (!TextUtils.isEmpty(fileIdVerify)) { -// String[] split = fileIdVerify.split(","); -// String firstImage = split[0]; -// if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { -// Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); -// } -// } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java b/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java deleted file mode 100644 index 7c9bbac..0000000 --- a/app/src/main/java/com/casic/dcms/adapter/verify/VerifyCaseListAdapter.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.casic.dcms.adapter.verify; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.casic.dcms.R; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.StringHelper; -import com.pengxh.androidx.lite.hub.StringHub; -import com.qmuiteam.qmui.widget.QMUIRadiusImageView; - -import java.util.List; - -public class VerifyCaseListAdapter extends RecyclerView.Adapter { - - private final Context context; - private final List dataBeans; - private final LayoutInflater layoutInflater; - - public VerifyCaseListAdapter(Context context, List dataRows) { - this.context = context; - this.dataBeans = dataRows; - this.layoutInflater = LayoutInflater.from(context); - } - - @NonNull - @Override - public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - return new ItemViewHolder(layoutInflater.inflate(R.layout.item_case_rv, parent, false)); - } - - @Override - public void onBindViewHolder(@NonNull VerifyCaseListAdapter.ItemViewHolder holder, @SuppressLint("RecyclerView") int position) { - holder.bindView(dataBeans.get(position)); - if (clickListener != null) { - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - clickListener.onClick(position); - } - }); - } - } - - @Override - public int getItemCount() { - return dataBeans.size(); - } - - class ItemViewHolder extends RecyclerView.ViewHolder { - - private final QMUIRadiusImageView caseImageView; - private final TextView caseTitleView; - private final TextView casePlaceView; - private final TextView caseTimeView; - - ItemViewHolder(@NonNull View itemView) { - super(itemView); - caseImageView = itemView.findViewById(R.id.caseImageView); - caseTitleView = itemView.findViewById(R.id.caseTitleView); - casePlaceView = itemView.findViewById(R.id.casePlaceView); - caseTimeView = itemView.findViewById(R.id.caseTimeView); - } - - void bindView(VerifyCaseModel.DataDTO.RowsDTO rowsBean) { - //核实图片 - String fileIdVerify = rowsBean.getFileIdVerify(); - if (!TextUtils.isEmpty(fileIdVerify)) { - String[] split = fileIdVerify.split(","); - String firstImage = split[0]; - if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { - Glide.with(context).load(StringHelper.appendCompleteURL(firstImage)).into(caseImageView); - } - } - caseTitleView.setText(StringHub.filterSpaceOrEnter(rowsBean.getDescription())); - casePlaceView.setText("发生地点:" + StringHub.filterSpaceOrEnter(rowsBean.getFieldintro())); - caseTimeView.setText("上报时间:" + rowsBean.getReportTime()); - } - } - - private OnItemClickListener clickListener; - - public interface OnItemClickListener { - void onClick(int position); - } - - public void setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.clickListener = onItemClickListener; - } -} diff --git a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java index 23f0f35..d12ff17 100644 --- a/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/HomePageFragment.java @@ -13,7 +13,6 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.view.BridgeMaintainActivity; -import com.casic.dcms.view.CaseOnMapActivity; import com.casic.dcms.view.OvertimeCaseActivity; import com.casic.dcms.view.PersonActivity; import com.casic.dcms.view.PipelineManagerActivity; @@ -24,11 +23,12 @@ import com.casic.dcms.view.check.CheckCaseActivity; import com.casic.dcms.view.department.DeptHandleActivity; import com.casic.dcms.view.handle.HandleCaseActivity; +import com.casic.dcms.view.map.CaseOnMapActivity; import com.casic.dcms.view.statistics.DataAnalysisActivity; import com.casic.dcms.view.toilet.PublicToiletActivity; -import com.casic.dcms.view.upload.CommonCaseUploadActivity; -import com.casic.dcms.view.upload.PackageCaseUploadActivity; -import com.casic.dcms.view.upload.QuickCaseUploadActivity; +import com.casic.dcms.view.upload.BriefCaseActivity; +import com.casic.dcms.view.upload.BusinessCaseActivity; +import com.casic.dcms.view.upload.CommonCaseActivity; import com.casic.dcms.view.urgent.UrgentCaseActivity; import com.casic.dcms.view.verify.VerifyCaseActivity; import com.casic.dcms.vm.HomePageViewModel; @@ -109,13 +109,13 @@ Intent intent = new Intent(); switch (menusBean.getName()) { case "案卷上报": - intent.setClass(requireContext(), CommonCaseUploadActivity.class); + intent.setClass(requireContext(), CommonCaseActivity.class); break; case "快速上报": - intent.setClass(requireContext(), QuickCaseUploadActivity.class); + intent.setClass(requireContext(), BriefCaseActivity.class); break; case "三包上报": - intent.setClass(requireContext(), PackageCaseUploadActivity.class); + intent.setClass(requireContext(), BusinessCaseActivity.class); break; case "案卷核实": intent.setClass(requireContext(), VerifyCaseActivity.class); diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java index 554c697..ec7b433 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifiedFragment.java @@ -8,12 +8,14 @@ import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifiedCaseListAdapter; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifiedCaseModel; +import com.casic.dcms.model.VerifiedCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifiedDetailActivity; +import com.casic.dcms.view.verify.VerifiedDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -27,11 +29,11 @@ public class CaseVerifiedFragment extends AndroidxBaseFragment { - private static final String TAG = "CaseHandledFragment"; + private static final String TAG = "CaseVerifiedFragment"; private CaseViewModel caseViewModel; - private VerifiedCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +51,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifiedModel.observe(this, new Observer() { + @Override + public void onChanged(VerifiedCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104254); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +107,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifiedModel.observe(this, new Observer() { - @Override - public void onChanged(VerifiedCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104254); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +127,19 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifiedCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifiedCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifiedDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifiedCaseModel.DataModel.RowsModel item) { + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifiedCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifiedDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java index 27f0c9d..35c388c 100644 --- a/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java +++ b/app/src/main/java/com/casic/dcms/fragment/verify/CaseVerifyFragment.java @@ -1,19 +1,27 @@ package com.casic.dcms.fragment.verify; +import static com.luck.picture.lib.thread.PictureThreadUtils.runOnUiThread; + +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Message; +import android.text.TextUtils; import android.view.View; import androidx.annotation.NonNull; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import com.casic.dcms.adapter.verify.VerifyCaseListAdapter; +import com.bumptech.glide.Glide; +import com.casic.dcms.R; import com.casic.dcms.databinding.FragmentVerifyCaseBinding; -import com.casic.dcms.model.verify.VerifyCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.view.verify.CaseVerifyDetailActivity; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.verify.VerifyDetailActivity; import com.casic.dcms.vm.CaseViewModel; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseFragment; import com.pengxh.androidx.lite.hub.ContextHub; import com.pengxh.androidx.lite.hub.StringHub; @@ -24,14 +32,15 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutionException; public class CaseVerifyFragment extends AndroidxBaseFragment { private static final String TAG = "CaseVerifyFragment"; private CaseViewModel caseViewModel; - private VerifyCaseListAdapter adapter; + private NormalRecyclerAdapter adapter; private WeakReferenceHandler weakReferenceHandler; - private List dataBeans = new ArrayList<>(); + private List dataBeans = new ArrayList<>(); private int pageIndex = 1; private boolean isRefresh, isLoadMore = false; @@ -49,12 +58,37 @@ protected void initData() { weakReferenceHandler = new WeakReferenceHandler(callback); caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + if (resultBean.getCode() == 200) { + List dataRows = resultBean.getData().getRows(); + if (isRefresh) { + dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 + dataBeans = dataRows; + viewBinding.refreshLayout.finishRefresh(); + isRefresh = false; + } else if (isLoadMore) { + if (dataRows.size() == 0) { + StringHub.show(requireContext(), "到底了,别拉了"); + } + dataBeans.addAll(dataRows); + viewBinding.refreshLayout.finishLoadMore(); + isLoadMore = false; + } else { + dataBeans = dataRows; + } + weakReferenceHandler.sendEmptyMessage(202104253); + } + } + }); } @Override public void onResume() { - obtainVerifyCaseList(); super.onResume(); + pageIndex = 1; + obtainVerifyCaseList(); } public void obtainVerifyCaseList() { @@ -80,31 +114,6 @@ obtainVerifyCaseList(); } }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - if (resultBean.getCode() == 200) { - List dataRows = resultBean.getData().getRows(); - if (isRefresh) { - dataBeans.clear();//下拉刷新必须先清空之前的List,不然会出现数据重复的问题 - dataBeans = dataRows; - viewBinding.refreshLayout.finishRefresh(); - isRefresh = false; - } else if (isLoadMore) { - if (dataRows.size() == 0) { - StringHub.show(requireContext(), "到底了,别拉了"); - } - dataBeans.addAll(dataRows); - viewBinding.refreshLayout.finishLoadMore(); - isLoadMore = false; - } else { - dataBeans = dataRows; - } - weakReferenceHandler.sendEmptyMessage(202104253); - } - } - }); } private final Handler.Callback callback = new Handler.Callback() { @@ -125,16 +134,42 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new VerifyCaseListAdapter(requireContext(), dataBeans); - viewBinding.caseRecyclerView.setAdapter(adapter); - adapter.setOnItemClickListener(new VerifyCaseListAdapter.OnItemClickListener() { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override - public void onClick(int position) { - ContextHub.navigatePageTo( - requireContext(), - CaseVerifyDetailActivity.class, - dataBeans.get(position).getId() - ); + public void convertView(ViewHolder viewHolder, int position, VerifyCaseModel.DataModel.RowsModel item) { + String fileIdVerify = item.getFileIdVerify(); + if (!TextUtils.isEmpty(fileIdVerify)) { + String[] split = fileIdVerify.split(","); + String firstImage = split[0]; + if (firstImage.endsWith(".jpg") || firstImage.contains(".jpeg") || firstImage.contains(".png")) { + new Thread(new Runnable() { + @Override + public void run() { + try { + Drawable drawable = Glide.with(requireContext()).load(StringHelper.appendCompleteURL(firstImage)).submit().get(); + runOnUiThread(new Runnable() { + @Override + public void run() { + viewHolder.setImageResource(R.id.caseImageView, drawable); + } + }); + } catch (ExecutionException | InterruptedException e) { + e.printStackTrace(); + } + } + }).start(); + } + } + viewHolder.setText(R.id.caseTitleView, StringHub.filterSpaceOrEnter(item.getDescription())) + .setText(R.id.casePlaceView, "发生地点:" + StringHub.filterSpaceOrEnter(item.getFieldintro())) + .setText(R.id.caseTimeView, "上报时间:" + item.getReportTime()); + } + }; + viewBinding.caseRecyclerView.setAdapter(adapter); + adapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, VerifyCaseModel.DataModel.RowsModel rowsModel) { + ContextHub.navigatePageTo(requireContext(), VerifyDetailActivity.class, rowsModel.getId()); } }); } diff --git a/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java new file mode 100644 index 0000000..4dc061b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifiedCaseModel.java @@ -0,0 +1,319 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifiedCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String preState; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String preOperator; + private String lng; + private String isOvertime; + private String currRoleName; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String sourceName; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getPreState() { + return preState; + } + + public void setPreState(String preState) { + this.preState = preState; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getPreOperator() { + return preOperator; + } + + public void setPreOperator(String preOperator) { + this.preOperator = preOperator; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java new file mode 100644 index 0000000..ce4d7ac --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/VerifyCaseModel.java @@ -0,0 +1,346 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class VerifyCaseModel { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private List rows; + private int total; + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public static class RowsModel { + private String isPostpone; + private String description; + private String source; + private String eorcName; + private String casetypeDetailName; + private String remainingTime; + private String casetypeName; + private String currUserId; + private String currUserName; + private String processId; + private String caseState; + private String id; + private String shopId; + private String fieldintro; + private String lat; + private String caseStateName; + private String lng; + private String isOvertime; + private String currRoleName; + private String fileIdVerify; + private String casetypeDetailCode; + private String onedeptid; + private String eorc; + private String currRoleId; + private String caseid; + private String casetypeCode; + private String nodeLimittime; + private String taskName; + private String sourceName; + private String fileIdProcess; + private String reportTime; + + public String getIsPostpone() { + return isPostpone; + } + + public void setIsPostpone(String isPostpone) { + this.isPostpone = isPostpone; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getEorcName() { + return eorcName; + } + + public void setEorcName(String eorcName) { + this.eorcName = eorcName; + } + + public String getCasetypeDetailName() { + return casetypeDetailName; + } + + public void setCasetypeDetailName(String casetypeDetailName) { + this.casetypeDetailName = casetypeDetailName; + } + + public String getRemainingTime() { + return remainingTime; + } + + public void setRemainingTime(String remainingTime) { + this.remainingTime = remainingTime; + } + + public String getCasetypeName() { + return casetypeName; + } + + public void setCasetypeName(String casetypeName) { + this.casetypeName = casetypeName; + } + + public String getCurrUserId() { + return currUserId; + } + + public void setCurrUserId(String currUserId) { + this.currUserId = currUserId; + } + + public String getCurrUserName() { + return currUserName; + } + + public void setCurrUserName(String currUserName) { + this.currUserName = currUserName; + } + + public String getProcessId() { + return processId; + } + + public void setProcessId(String processId) { + this.processId = processId; + } + + public String getCaseState() { + return caseState; + } + + public void setCaseState(String caseState) { + this.caseState = caseState; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getShopId() { + return shopId; + } + + public void setShopId(String shopId) { + this.shopId = shopId; + } + + public String getFieldintro() { + return fieldintro; + } + + public void setFieldintro(String fieldintro) { + this.fieldintro = fieldintro; + } + + public String getLat() { + return lat; + } + + public void setLat(String lat) { + this.lat = lat; + } + + public String getCaseStateName() { + return caseStateName; + } + + public void setCaseStateName(String caseStateName) { + this.caseStateName = caseStateName; + } + + public String getLng() { + return lng; + } + + public void setLng(String lng) { + this.lng = lng; + } + + public String getIsOvertime() { + return isOvertime; + } + + public void setIsOvertime(String isOvertime) { + this.isOvertime = isOvertime; + } + + public String getCurrRoleName() { + return currRoleName; + } + + public void setCurrRoleName(String currRoleName) { + this.currRoleName = currRoleName; + } + + public String getFileIdVerify() { + return fileIdVerify; + } + + public void setFileIdVerify(String fileIdVerify) { + this.fileIdVerify = fileIdVerify; + } + + public String getCasetypeDetailCode() { + return casetypeDetailCode; + } + + public void setCasetypeDetailCode(String casetypeDetailCode) { + this.casetypeDetailCode = casetypeDetailCode; + } + + public String getOnedeptid() { + return onedeptid; + } + + public void setOnedeptid(String onedeptid) { + this.onedeptid = onedeptid; + } + + public String getEorc() { + return eorc; + } + + public void setEorc(String eorc) { + this.eorc = eorc; + } + + public String getCurrRoleId() { + return currRoleId; + } + + public void setCurrRoleId(String currRoleId) { + this.currRoleId = currRoleId; + } + + public String getCaseid() { + return caseid; + } + + public void setCaseid(String caseid) { + this.caseid = caseid; + } + + public String getCasetypeCode() { + return casetypeCode; + } + + public void setCasetypeCode(String casetypeCode) { + this.casetypeCode = casetypeCode; + } + + public String getNodeLimittime() { + return nodeLimittime; + } + + public void setNodeLimittime(String nodeLimittime) { + this.nodeLimittime = nodeLimittime; + } + + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + } + + public String getSourceName() { + return sourceName; + } + + public void setSourceName(String sourceName) { + this.sourceName = sourceName; + } + + public String getFileIdProcess() { + return fileIdProcess; + } + + public void setFileIdProcess(String fileIdProcess) { + this.fileIdProcess = fileIdProcess; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java deleted file mode 100644 index a817351..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifiedCaseModel.java +++ /dev/null @@ -1,328 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifiedCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private int preState; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String preOperator; - private String lng; - private String isOvertime; - private String currRoleName; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String sourceName; - private String reportTime; - private String onedeptName; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public int getPreState() { - return preState; - } - - public void setPreState(int preState) { - this.preState = preState; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getPreOperator() { - return preOperator; - } - - public void setPreOperator(String preOperator) { - this.preOperator = preOperator; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - - public String getOnedeptName() { - return onedeptName; - } - - public void setOnedeptName(String onedeptName) { - this.onedeptName = onedeptName; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java b/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java deleted file mode 100644 index 647c174..0000000 --- a/app/src/main/java/com/casic/dcms/model/verify/VerifyCaseModel.java +++ /dev/null @@ -1,346 +0,0 @@ -package com.casic.dcms.model.verify; - -import java.util.List; - -public class VerifyCaseModel { - - private int code; - private DataDTO data; - private String message; - private boolean success; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public DataDTO getData() { - return data; - } - - public void setData(DataDTO data) { - this.data = data; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public static class DataDTO { - private List rows; - private int total; - - public List getRows() { - return rows; - } - - public void setRows(List rows) { - this.rows = rows; - } - - public int getTotal() { - return total; - } - - public void setTotal(int total) { - this.total = total; - } - - public static class RowsDTO { - private int isPostpone; - private String description; - private int source; - private String eorcName; - private String casetypeDetailName; - private String remainingTime; - private String casetypeName; - private String currUserId; - private String currUserName; - private String processId; - private int caseState; - private String id; - private String shopId; - private String fieldintro; - private String lat; - private String caseStateName; - private String lng; - private String isOvertime; - private String currRoleName; - private String fileIdVerify; - private String casetypeDetailCode; - private String onedeptid; - private String eorc; - private String currRoleId; - private String caseid; - private String casetypeCode; - private String nodeLimittime; - private String taskName; - private String sourceName; - private String fileIdProcess; - private String reportTime; - - public int getIsPostpone() { - return isPostpone; - } - - public void setIsPostpone(int isPostpone) { - this.isPostpone = isPostpone; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public int getSource() { - return source; - } - - public void setSource(int source) { - this.source = source; - } - - public String getEorcName() { - return eorcName; - } - - public void setEorcName(String eorcName) { - this.eorcName = eorcName; - } - - public String getCasetypeDetailName() { - return casetypeDetailName; - } - - public void setCasetypeDetailName(String casetypeDetailName) { - this.casetypeDetailName = casetypeDetailName; - } - - public String getRemainingTime() { - return remainingTime; - } - - public void setRemainingTime(String remainingTime) { - this.remainingTime = remainingTime; - } - - public String getCasetypeName() { - return casetypeName; - } - - public void setCasetypeName(String casetypeName) { - this.casetypeName = casetypeName; - } - - public String getCurrUserId() { - return currUserId; - } - - public void setCurrUserId(String currUserId) { - this.currUserId = currUserId; - } - - public String getCurrUserName() { - return currUserName; - } - - public void setCurrUserName(String currUserName) { - this.currUserName = currUserName; - } - - public String getProcessId() { - return processId; - } - - public void setProcessId(String processId) { - this.processId = processId; - } - - public int getCaseState() { - return caseState; - } - - public void setCaseState(int caseState) { - this.caseState = caseState; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getShopId() { - return shopId; - } - - public void setShopId(String shopId) { - this.shopId = shopId; - } - - public String getFieldintro() { - return fieldintro; - } - - public void setFieldintro(String fieldintro) { - this.fieldintro = fieldintro; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - public String getCaseStateName() { - return caseStateName; - } - - public void setCaseStateName(String caseStateName) { - this.caseStateName = caseStateName; - } - - public String getLng() { - return lng; - } - - public void setLng(String lng) { - this.lng = lng; - } - - public String getIsOvertime() { - return isOvertime; - } - - public void setIsOvertime(String isOvertime) { - this.isOvertime = isOvertime; - } - - public String getCurrRoleName() { - return currRoleName; - } - - public void setCurrRoleName(String currRoleName) { - this.currRoleName = currRoleName; - } - - public String getFileIdVerify() { - return fileIdVerify; - } - - public void setFileIdVerify(String fileIdVerify) { - this.fileIdVerify = fileIdVerify; - } - - public String getCasetypeDetailCode() { - return casetypeDetailCode; - } - - public void setCasetypeDetailCode(String casetypeDetailCode) { - this.casetypeDetailCode = casetypeDetailCode; - } - - public String getOnedeptid() { - return onedeptid; - } - - public void setOnedeptid(String onedeptid) { - this.onedeptid = onedeptid; - } - - public String getEorc() { - return eorc; - } - - public void setEorc(String eorc) { - this.eorc = eorc; - } - - public String getCurrRoleId() { - return currRoleId; - } - - public void setCurrRoleId(String currRoleId) { - this.currRoleId = currRoleId; - } - - public String getCaseid() { - return caseid; - } - - public void setCaseid(String caseid) { - this.caseid = caseid; - } - - public String getCasetypeCode() { - return casetypeCode; - } - - public void setCasetypeCode(String casetypeCode) { - this.casetypeCode = casetypeCode; - } - - public String getNodeLimittime() { - return nodeLimittime; - } - - public void setNodeLimittime(String nodeLimittime) { - this.nodeLimittime = nodeLimittime; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } - - public String getSourceName() { - return sourceName; - } - - public void setSourceName(String sourceName) { - this.sourceName = sourceName; - } - - public String getFileIdProcess() { - return fileIdProcess; - } - - public void setFileIdProcess(String fileIdProcess) { - this.fileIdProcess = fileIdProcess; - } - - public String getReportTime() { - return reportTime; - } - - public void setReportTime(String reportTime) { - this.reportTime = reportTime; - } - } - } -} diff --git a/app/src/main/java/com/casic/dcms/utils/MapHelper.java b/app/src/main/java/com/casic/dcms/utils/MapHelper.java index 852714a..6f9bd67 100644 --- a/app/src/main/java/com/casic/dcms/utils/MapHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/MapHelper.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.text.TextUtils; -import com.casic.dcms.view.DisplayMapActivity; +import com.casic.dcms.view.map.DisplayMapActivity; import com.pengxh.androidx.lite.hub.StringHub; public class MapHelper { diff --git a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java deleted file mode 100644 index 82185d6..0000000 --- a/app/src/main/java/com/casic/dcms/view/ArcGISMapActivity.java +++ /dev/null @@ -1,500 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Color; -import android.graphics.drawable.BitmapDrawable; -import android.view.MotionEvent; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.model.PointFutureBean; -import com.casic.dcms.model.ShopFeatureBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.HttpRequestHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ICommunityListener; -import com.casic.dcms.utils.callback.IHttpRequestListener; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.Feature; -import com.esri.arcgisruntime.data.QueryParameters; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.GeoElement; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; - -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.IOException; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import okhttp3.ResponseBody; - -public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { - - private static final String TAG = "ArcGISMapActivity"; - private final Context context = ArcGISMapActivity.this; - private FeatureLayer communityLayer, pointLayer, packageLayer; - private Point clickPoint; - private Gson gson; - private String caseType; - private ListenableList overlayGraphics; - private ListenableList graphicsOverlays; - private GraphicsOverlay mGraphicsOverlay; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("选择点位"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - caseType = getIntent().getStringExtra("type"); - gson = new Gson(); - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - //设置地图显示的区域 -// String community = StringHelper.getUserBean().getCommunity(); -// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); -// Type type = new TypeToken>() { -// }.getType(); -// List enevlopBeans = gson.fromJson(assetsData, type); -// if (enevlopBeans != null) { -// Envelope initialExtent = null; -// for (CommunityEnevlopBean bean : enevlopBeans) { -// if (bean.getCommunity().equals(community)) { -// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); -// initialExtent = new Envelope( -// enevlop.getX_min(), enevlop.getY_min(), -// enevlop.getX_max(), enevlop.getY_max(), -// SpatialReference.create(4326) -// ); -// break; -// } -// } -// if (initialExtent != null) { -// Viewpoint viewpoint = new Viewpoint(initialExtent); -// mapView.setViewpoint(viewpoint); -// } -// } - - //设置定位点 - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - } - } - }, true); - - //网格和社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - communityLayer = new FeatureLayer(communityFeatureTable); - /** - * 设置地图数据图层,这里可以添加很多别的图层 - * - * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 - * */ - switch (caseType) { - case "部件": - //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - pointLayer = new FeatureLayer(pointFeatureTable); - arcGISMap.getOperationalLayers().add(pointLayer); - break; - case "三包上报": - case "商铺变更": - //门前三包 (ID: 1) - ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); - packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - packageLayer = new FeatureLayer(packageFeatureTable); - arcGISMap.getOperationalLayers().add(packageLayer); - break; - } - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - mGraphicsOverlay = new GraphicsOverlay(); - overlayGraphics = mGraphicsOverlay.getGraphics(); - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - addMarker(clickPoint); - - //查询参数 - QueryParameters queryParameters = new QueryParameters(); - queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 - - //不管是事件还是部件,都的需要社区信息 - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - if (caseType.equals("事件")) { - Map attributes = feature.getAttributes(); - showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); - } - } - }); - switch (caseType) { - case "部件": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> pointList = new ArrayList<>(); - ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); - pointFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = pointFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - pointList.add(attributes); - } -// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type gridType = new TypeToken>() { - }.getType(); - List beans = gson.fromJson(gson.toJson(pointList), gridType); - for (PointFutureBean featureBean : beans) { - menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - showDialog( - featureBean.getBgid(), - featureBean.getObjid(), - featureBean.getObjname(), - featureBean.getDl(), - featureBean.getXl(), - (String) feature.getAttributes().get("Note")); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e1) { - e1.printStackTrace(); - } - } - }); - } - }); - break; - case "三包上报": - case "商铺变更": - LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { - @Override - public void onCommunityFeatureGet(Feature feature) { - //先取社区信息,再取部件信息 - List> shopList = new ArrayList<>(); - ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); - packageFuture.addDoneListener(new Runnable() { - @Override - public void run() { - try { - IdentifyLayerResult identifyLayerResult = packageFuture.get(); - List elements = identifyLayerResult.getElements(); - for (GeoElement element : elements) { - Map attributes = element.getAttributes(); - shopList.add(attributes); - } -// Log.d(TAG, "shopList: " + gson.toJson(shopList)); - runOnUiThread(() -> { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要上报的部件"); - Type shopType = new TypeToken>() { - }.getType(); - List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); - - //设置dialog列表 - menuDialogBuilder.setTitle("请选择商户"); - for (ShopFeatureBean featureBean : shopBeans) { - menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); - HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { - @Override - public void onSuccess(ResponseBody resultBean) { - DialogHelper.dismissLoadingDialog(); - try { - JSONObject jsonObject = new JSONObject(resultBean.string()); - JSONObject data = jsonObject.getJSONObject("data"); - String shopId = data.getString("id"); - showShopDialog(featureBean.getBgid(), - (String) feature.getAttributes().get("Note"), - featureBean.getDutyname(), - shopId); - } catch (IOException | JSONException e) { - e.printStackTrace(); - } - } - - @Override - public void onFailure(Throwable throwable) { - - } - }); - } - }); - } - menuDialogBuilder.create().show(); - }); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); - } - }); - break; - } - return true; - } - }); - } - - /** - * 三包 - */ - private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("已选择商户:" + shopName + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("shopName", shopName); - intent.putExtra("shopID", shopID); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 部件 - */ - private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件地点所在网格为:[" + gridId + "]" - + "\r\n选择部件为:" + objId + "(" + objName + ")" - + "\r\n部件大类为:" + largeType - + "\r\n小类为:" + smallType - + "\r\n确认提交?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * 事件 - */ - private void showDialog(String gridId, String communityName) { - if (!this.isFinishing()) { - new AlertControlDialog.Builder() - .setContext(this) - .setTitle("提示") - .setMessage("该事件所在地点网格为:[" + gridId + "]" - + "\r\n所在社区为:" + communityName - + "\r\n确认选择?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - Intent intent = new Intent(); - intent.putExtra("latitude", clickPoint.getY()); - intent.putExtra("longitude", clickPoint.getX()); - intent.putExtra("community", communityName); - intent.putExtra("gridId", gridId); - setResult(RESULT_OK, intent); - finish(); - } - - @Override - public void onCancelClick() { - - } - }) - .build().show(); - } - } - - /** - * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - private void addMarker(Point clickPoint) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); - if (overlayGraphics != null && graphicsOverlays != null) { - overlayGraphics.clear(); - graphicsOverlays.clear(); - } - Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64); - pictureMarker.setHeight(42); - pictureMarker.loadAsync(); - - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - public void onClick(View v) { - int id = v.getId(); - if (id == R.id.expandMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } else if (id == R.id.minusMapView) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } else if (id == R.id.removeToLocalView) { - DialogHelper.showLoadingDialog(this, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(this, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - if (aMapLocation != null) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800); - DialogHelper.dismissLoadingDialog(); - } - } - }, true); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java deleted file mode 100644 index ea4ae5c..0000000 --- a/app/src/main/java/com/casic/dcms/view/CaseOnMapActivity.java +++ /dev/null @@ -1,379 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.os.Message; -import android.text.TextUtils; -import android.util.Log; -import android.view.MotionEvent; -import android.widget.RadioGroup; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapCaseBinding; -import com.casic.dcms.model.CaseHandleBean; -import com.casic.dcms.model.PointDataBean; -import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifyCaseModel; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.CaseViewModel; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { - - private static final String TAG = "CaseOnMapActivity"; - private final Context context = this; - private CaseViewModel caseViewModel; - private ListenableList graphics; - private ListenableList graphicsOverlays; - private List casePointList = new ArrayList<>(); - private WeakReferenceHandler weakReferenceHandler; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - weakReferenceHandler = new WeakReferenceHandler(callback); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - //默认加载处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); - viewBinding.mapView.setMap(arcGISMap); - - //Marker相关Layer - graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - caseViewModel.caseCheckModel.observe(this, new Observer() { - @Override - public void onChanged(CaseCheckModel resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_CHECK); - } else { - StringHub.show(context, "当前没有[待核查]的案卷"); - } - } - } - }); - - caseViewModel.caseHandleModel.observe(this, new Observer() { - @Override - public void onChanged(CaseHandleBean resultBean) { - clearPictureMarker(); - if (resultBean.isSuccess()) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); - } else { - StringHub.show(context, "当前没有[处理中]的案卷"); - } - } - } - }); - - caseViewModel.caseVerifyModel.observe(this, new Observer() { - @Override - public void onChanged(VerifyCaseModel resultBean) { - clearPictureMarker(); - if (resultBean.getCode() == 200) { - List rowsBeans = resultBean.getData().getRows(); - if (rowsBeans.size() >= 1) { - List list = new ArrayList<>(); - List pointList = new ArrayList<>(); - for (VerifyCaseModel.DataDTO.RowsDTO bean : rowsBeans) { - String lng = bean.getLng(); - String lat = bean.getLat(); - if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { - Log.d(TAG, "案卷经纬度异常"); - continue; - } - relatePointToCase(list, bean.getId(), lng, lat); - - Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); - pointList.add(point); - } - addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); - } else { - StringHub.show(context, "当前没有[待核实]的案卷"); - } - } - } - }); - - viewBinding.radioGroup.setOnCheckedChangeListener(this); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - - final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - for (PointDataBean dataBean : casePointList) { - double parseLng = Double.parseDouble(dataBean.getLng()); - double parseLat = Double.parseDouble(dataBean.getLat()); - if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && - Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { - Message message = weakReferenceHandler.obtainMessage(); - message.what = 2021051401; - message.obj = dataBean.getId(); - weakReferenceHandler.sendMessage(message); - } - } - } else { - weakReferenceHandler.sendEmptyMessage(2021051402); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - } - - private final Handler.Callback callback = msg -> { - switch (msg.what) { - case 2021051401: - String caseId = (String) msg.obj; - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("查看案卷详情") - .setMessage("ID:" + caseId) - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - break; - case 2021051402: - StringHub.show(this, "此附近无案卷,请重新选点"); - break; - default: - break; - } - return true; - }; - - @Override - public void onCheckedChanged(RadioGroup group, int checkedId) { - if (checkedId == R.id.handleRadioButton) { - resetRadioButton(0); - } else if (checkedId == R.id.verifyRadioButton) { - resetRadioButton(1); - } else if (checkedId == R.id.checkRadioButton) { - resetRadioButton(2); - } - } - - private void resetRadioButton(int index) { - switch (index) { - case 0: - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求处置中数据 - caseViewModel.obtainHandleCaseList(null, null, 1, true); - break; - case 1: - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核实数据 - caseViewModel.obtainVerifyCaseList(1000, 1, false); - break; - case 2: - viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); - viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); - - //请求待核查数据 - caseViewModel.obtainCheckCaseList(1000, 1, false); - break; - default: - break; - } - } - - /** - * 关联Marker和案卷 - * - * @param list 临时数据集合 - */ - private void relatePointToCase(List list, String id, String lng, String lat) { - PointDataBean casePoint = new PointDataBean(); - casePoint.setId(id); - casePoint.setLng(lng); - casePoint.setLat(lat); - list.add(casePoint); - casePointList = list; - } - - private void addPictureMarker(List points, int caseStatus) { - Bitmap caseBitmap; - switch (caseStatus) { - case LocaleConstant.CASE_HANDLE: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); - break; - case LocaleConstant.CASE_VERIFY: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - break; - case LocaleConstant.CASE_CHECK: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); - break; - default: - caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); - break; - } - for (Point point : points) { - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setHeight(24); - pictureMarker.setWidth(24); - pictureMarker.loadAsync();//异步加载Marker,防止阻塞 - - GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); - graphics = graphicsOverlay.getGraphics(); - graphics.add(new Graphic(point, pictureMarker)); - graphicsOverlays.add(graphicsOverlay); - } - } - - private void clearPictureMarker() { - if (graphics != null && graphicsOverlays != null) { - graphics.clear(); - graphicsOverlays.clear(); - } - } - - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java index 0a65da1..01e9ff6 100644 --- a/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java +++ b/app/src/main/java/com/casic/dcms/view/CaseSearchResultActivity.java @@ -158,7 +158,7 @@ }); } else { viewBinding.emptyView.hide(); - adapter = new NormalRecyclerAdapter(R.layout.item_case_rv, dataBeans) { + adapter = new NormalRecyclerAdapter(R.layout.item_case_rv_l, dataBeans) { @Override public void convertView(ViewHolder viewHolder, int position, CaseSearchResultBean.DataDTO.RowsDTO item) { diff --git a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java deleted file mode 100644 index d0114f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/DisplayMapActivity.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.casic.dcms.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityGisBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.data.ServiceFeatureTable; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.layers.FeatureLayer; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.List; - -public class DisplayMapActivity extends AndroidxBaseActivity { - - private final Context context = DisplayMapActivity.this; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("位置查看"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String caseType = getIntent().getStringExtra("caseType"); - double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - - //社区 (ID: 13) - ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); - communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); - if ("部件".equals(caseType)) { //部件点图层 (ID: 2) - ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); - pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); - FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); - - List layerList = new ArrayList<>(); - layerList.add(communityLayer); - layerList.add(pointLayer); - arcGISMap.getOperationalLayers().addAll(layerList); - } - viewBinding.mapView.setMap(arcGISMap); - /** - * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 - */ - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 - //添加图片Marker - addPictureMarker(point); - } - - @Override - protected void initEvent() { - viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); - viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(point); - viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(24f); - pictureMarker.setHeight(24f); - pictureMarker.loadAsync(); - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java index bb7358e..2cbb350 100644 --- a/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java +++ b/app/src/main/java/com/casic/dcms/view/PipelineManagerActivity.java @@ -18,6 +18,7 @@ import com.casic.dcms.model.ActionResultBean; import com.casic.dcms.model.AlarmDataBean; import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.map.WarningOnMapActivity; import com.casic.dcms.vm.AlarmViewModel; import com.casic.dcms.widgets.CancelAlarmDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java deleted file mode 100644 index 3bc49b7..0000000 --- a/app/src/main/java/com/casic/dcms/view/WarningOnMapActivity.java +++ /dev/null @@ -1,221 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityMapWarningBinding; -import com.casic.dcms.model.AlarmDataBean; -import com.casic.dcms.model.WellDetailBean; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.vm.AlarmViewModel; -import com.casic.dcms.vm.WellViewModel; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.SaveKeyValues; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIDialog; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.ArrayList; -import java.util.List; - -public class WarningOnMapActivity extends AndroidxBaseActivity { - - private static final String TAG = "WarningOnMapActivity"; - private final Context context = this; - private final List geometryList = new ArrayList<>(); - private AlarmViewModel alarmViewModel; - private WellViewModel wellViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("报警分布"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 - viewBinding.mapView.setViewpointScaleAsync(64000); - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); - arcGISMap.setBasemap(basemap); - viewBinding.mapView.setMap(arcGISMap); - - int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); - alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); - alarmViewModel.obtainAlarmList(alarmTotal, 1); - - wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - alarmViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(AlarmDataBean alarmDataBean) { - if (alarmDataBean.getCode() == 200) { - List dataRows = alarmDataBean.getData().getRows(); - for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { - String queryParam = "编号='" + rowsBean.getWellCode() + "'"; - wellViewModel.obtainWellDetail(queryParam); - } - } - } - }); - - alarmViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - wellViewModel.resultModel.observe(this, new Observer() { - @Override - public void onChanged(WellDetailBean wellDetailBean) { - List features = wellDetailBean.getFeatures(); - if (features.size() > 0) { - WellDetailBean.FeaturesBean featuresBean = features.get(0); - //将获取到的井数据缓存起来 - geometryList.add(featuresBean); - WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); - //每获取一个点就绘制出 - addMarker(new Point(geometryBean.getX(), geometryBean.getY())); - } - } - }); - - wellViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - - } - }); - - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); - Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); - if (geometryList.size() > 0) { - List tempList = new ArrayList<>(); - for (WellDetailBean.FeaturesBean featuresBean : geometryList) { - WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); - if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && - Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { - tempList.add(featuresBean); - } - } - if (tempList.size() > 0) { - QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); - menuDialogBuilder.setTitle("请选择您要查看的窨井"); - for (WellDetailBean.FeaturesBean dataBean : tempList) { - menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - - View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); - TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); - TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); - TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); - - WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); - wellCodeView.setText(attributes.get编号()); - wellTypeView.setText(attributes.get附属物名称()); - wellPositionView.setText(attributes.get所属道路()); - - QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } - }); - } - menuDialogBuilder.create().show(); - } - } - return super.onSingleTapConfirmed(e); - } - }); - } - - protected void onResume() { - viewBinding.mapView.resume(); - super.onResume(); - } - - @Override - protected void onPause() { - viewBinding.mapView.pause(); - super.onPause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } - - private void addMarker(Point point) { - SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); - Graphic graphic = new Graphic(point, simpleMarkerSymbol); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java deleted file mode 100644 index 5c86fad..0000000 --- a/app/src/main/java/com/casic/dcms/view/WorkerOnMapActivity.java +++ /dev/null @@ -1,210 +0,0 @@ -package com.casic.dcms.view; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.drawable.BitmapDrawable; -import android.os.Handler; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.amap.api.location.AMapLocation; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityWorkerMapBinding; -import com.casic.dcms.utils.ArcGisMapCreator; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.LocationHelper; -import com.casic.dcms.utils.callback.ILocationListener; -import com.esri.arcgisruntime.concurrent.ListenableFuture; -import com.esri.arcgisruntime.geometry.Point; -import com.esri.arcgisruntime.geometry.SpatialReferences; -import com.esri.arcgisruntime.mapping.ArcGISMap; -import com.esri.arcgisruntime.mapping.Basemap; -import com.esri.arcgisruntime.mapping.BasemapStyle; -import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; -import com.esri.arcgisruntime.mapping.view.Graphic; -import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; -import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; -import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; -import com.esri.arcgisruntime.util.ListenableList; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.utils.WeakReferenceHandler; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; - -import java.util.List; -import java.util.concurrent.ExecutionException; - -public class WorkerOnMapActivity extends AndroidxBaseActivity { - - private final Context context = WorkerOnMapActivity.this; - private WeakReferenceHandler weakReferenceHandler; - private String userName; - private String createTime; - private String toiletName; - private double lng = 0.0; - private double lat = 0.0; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("查看位置"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - userName = getIntent().getStringExtra("userName"); - createTime = getIntent().getStringExtra("createTime"); - toiletName = getIntent().getStringExtra("toiletName"); - lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); - lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); - viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 - ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); - //创建底图、并设置底图图层 - Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); - arcGISMap.setBasemap(baseMap); - viewBinding.mapView.setMap(arcGISMap); - weakReferenceHandler = new WeakReferenceHandler(callback); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - protected void initEvent() { - Point point = new Point(lng, lat, SpatialReferences.getWgs84()); - viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 - addPictureMarker(point); - viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); - ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); - overlaysAsync.addDoneListener(new Runnable() { - @Override - public void run() { - try { - List overlayResultList = overlaysAsync.get(); - if (!overlayResultList.isEmpty()) { - IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); - Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); - if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { - weakReferenceHandler.sendEmptyMessage(2021060101); - } - } else { - weakReferenceHandler.sendEmptyMessage(2021060102); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - }); - return super.onSingleTapConfirmed(e); - } - }); - - viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); - } - }); - - viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); - } - }); - - viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - DialogHelper.showLoadingDialog(context, "定位中,请稍后"); - LocationHelper.obtainCurrentLocation(context, new ILocationListener() { - - @Override - public void onAMapLocationGet(AMapLocation aMapLocation) { - double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); - Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); - addPictureMarker(p); - viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); - DialogHelper.dismissLoadingDialog(); - } - }, true); - } - }); - } - - private final Handler.Callback callback = msg -> { - if (msg.what == 2021060101) { - View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); - TextView userNameView = popupView.findViewById(R.id.userNameView); - TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); - TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); - userNameView.setText(userName); - signInTimeView.setText(createTime); - toiletNameView.setText(toiletName); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(popupView) - .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) - .dimAmount(0.6f) - .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) - .onDismiss(null) - .show(viewBinding.mapView); - } else if (msg.what == 2021060102) { - StringHub.show(this, "附近无工作人员,请重新选点"); - } - return true; - }; - - private void addPictureMarker(Point point) { - Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); - BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); - PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); - pictureMarker.setWidth(64f); - pictureMarker.setHeight(42f); - pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 - Graphic graphic = new Graphic(point, pictureMarker); - GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); - ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); - ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); - overlayGraphics.add(graphic); - graphicsOverlays.add(mGraphicsOverlay); - } - - @Override - protected void onResume() { - super.onResume(); - viewBinding.mapView.resume(); - } - - @Override - protected void onPause() { - super.onPause(); - viewBinding.mapView.pause(); - } - - @Override - protected void onDestroy() { - viewBinding.mapView.dispose(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java index 94f629a..2a33ac4 100644 --- a/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java +++ b/app/src/main/java/com/casic/dcms/view/business/ChangeShopInfoActivity.java @@ -21,8 +21,8 @@ import com.casic.dcms.utils.PictureSelectorHelper; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; import com.casic.dcms.vm.ShopViewModel; import com.casic.dcms.vm.UploadViewModel; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java new file mode 100644 index 0000000..890744d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/ArcGISMapActivity.java @@ -0,0 +1,503 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.view.MotionEvent; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.model.PointFutureBean; +import com.casic.dcms.model.ShopFeatureBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.HttpRequestHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ICommunityListener; +import com.casic.dcms.utils.callback.IHttpRequestListener; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.Feature; +import com.esri.arcgisruntime.data.QueryParameters; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.GeoElement; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.IOException; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import okhttp3.ResponseBody; + +/** + * 地图点位选择 + */ +public class ArcGISMapActivity extends AndroidxBaseActivity implements View.OnClickListener { + + private static final String TAG = "ArcGISMapActivity"; + private final Context context = ArcGISMapActivity.this; + private FeatureLayer communityLayer, pointLayer, packageLayer; + private Point clickPoint; + private Gson gson; + private String caseType; + private ListenableList overlayGraphics; + private ListenableList graphicsOverlays; + private GraphicsOverlay mGraphicsOverlay; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("选择点位"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + caseType = getIntent().getStringExtra("type"); + gson = new Gson(); + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + //设置地图显示的区域 +// String community = StringHelper.getUserBean().getCommunity(); +// String assetsData = StringHelper.getAssetsData(getAssets(), "enevlop.json"); +// Type type = new TypeToken>() { +// }.getType(); +// List enevlopBeans = gson.fromJson(assetsData, type); +// if (enevlopBeans != null) { +// Envelope initialExtent = null; +// for (CommunityEnevlopBean bean : enevlopBeans) { +// if (bean.getCommunity().equals(community)) { +// CommunityEnevlopBean.EnevlopBean enevlop = bean.getEnevlop(); +// initialExtent = new Envelope( +// enevlop.getX_min(), enevlop.getY_min(), +// enevlop.getX_max(), enevlop.getY_max(), +// SpatialReference.create(4326) +// ); +// break; +// } +// } +// if (initialExtent != null) { +// Viewpoint viewpoint = new Viewpoint(initialExtent); +// mapView.setViewpoint(viewpoint); +// } +// } + + //设置定位点 + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + Point point = new Point(aMapLocation.getLongitude(), aMapLocation.getLatitude(), SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + } + } + }, true); + + //网格和社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + communityLayer = new FeatureLayer(communityFeatureTable); + /** + * 设置地图数据图层,这里可以添加很多别的图层 + * + * 如果是事件,加载单元网格图层,如果是部件,加载部件图层 + * */ + switch (caseType) { + case "部件": + //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + pointLayer = new FeatureLayer(pointFeatureTable); + arcGISMap.getOperationalLayers().add(pointLayer); + break; + case "三包上报": + case "商铺变更": + //门前三包 (ID: 1) + ServiceFeatureTable packageFeatureTable = ArcGisMapCreator.createOtherFeatureTable("店铺三包"); + packageFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + packageLayer = new FeatureLayer(packageFeatureTable); + arcGISMap.getOperationalLayers().add(packageLayer); + break; + } + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + mGraphicsOverlay = new GraphicsOverlay(); + overlayGraphics = mGraphicsOverlay.getGraphics(); + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + addMarker(clickPoint); + + //查询参数 + QueryParameters queryParameters = new QueryParameters(); + queryParameters.setGeometry(clickPoint);//查询点击位置所在的社区 + + //不管是事件还是部件,都的需要社区信息 + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + if (caseType.equals("事件")) { + Map attributes = feature.getAttributes(); + showDialog((String) attributes.get("GBID"), (String) attributes.get("Note")); + } + } + }); + switch (caseType) { + case "部件": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> pointList = new ArrayList<>(); + ListenableFuture pointFuture = viewBinding.mapView.identifyLayerAsync(pointLayer, screenPoint, 15, false, -1); + pointFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = pointFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + pointList.add(attributes); + } +// Log.d(TAG, "onCommunityFeatureGet: " + gson.toJson(pointList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type gridType = new TypeToken>() { + }.getType(); + List beans = gson.fromJson(gson.toJson(pointList), gridType); + for (PointFutureBean featureBean : beans) { + menuDialogBuilder.addItem(featureBean.getObjid() + "(" + featureBean.getObjname() + ")", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showDialog( + featureBean.getBgid(), + featureBean.getObjid(), + featureBean.getObjname(), + featureBean.getDl(), + featureBean.getXl(), + (String) feature.getAttributes().get("Note")); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + } + }); + break; + case "三包上报": + case "商铺变更": + LocationHelper.obtainCurrentCommunity(communityLayer, queryParameters, new ICommunityListener() { + @Override + public void onCommunityFeatureGet(Feature feature) { + //先取社区信息,再取部件信息 + List> shopList = new ArrayList<>(); + ListenableFuture packageFuture = viewBinding.mapView.identifyLayerAsync(packageLayer, screenPoint, 15, false, -1); + packageFuture.addDoneListener(new Runnable() { + @Override + public void run() { + try { + IdentifyLayerResult identifyLayerResult = packageFuture.get(); + List elements = identifyLayerResult.getElements(); + for (GeoElement element : elements) { + Map attributes = element.getAttributes(); + shopList.add(attributes); + } +// Log.d(TAG, "shopList: " + gson.toJson(shopList)); + runOnUiThread(() -> { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要上报的部件"); + Type shopType = new TypeToken>() { + }.getType(); + List shopBeans = gson.fromJson(gson.toJson(shopList), shopType); + + //设置dialog列表 + menuDialogBuilder.setTitle("请选择商户"); + for (ShopFeatureBean featureBean : shopBeans) { + menuDialogBuilder.addItem(featureBean.getDutyname(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + DialogHelper.showLoadingDialog(context, "查询商户信息中,请稍后"); + HttpRequestHelper.doRequest(LocaleConstant.SHOP_MERCHANT_ID, featureBean.getObjid(), new IHttpRequestListener() { + @Override + public void onSuccess(ResponseBody resultBean) { + DialogHelper.dismissLoadingDialog(); + try { + JSONObject jsonObject = new JSONObject(resultBean.string()); + JSONObject data = jsonObject.getJSONObject("data"); + String shopId = data.getString("id"); + showShopDialog(featureBean.getBgid(), + (String) feature.getAttributes().get("Note"), + featureBean.getDutyname(), + shopId); + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onFailure(Throwable throwable) { + + } + }); + } + }); + } + menuDialogBuilder.create().show(); + }); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + }); + break; + } + return true; + } + }); + } + + /** + * 三包 + */ + private void showShopDialog(String gridId, String communityName, String shopName, String shopID) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("已选择商户:" + shopName + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("shopName", shopName); + intent.putExtra("shopID", shopID); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 部件 + */ + private void showDialog(String gridId, String objId, String objName, String largeType, String smallType, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件地点所在网格为:[" + gridId + "]" + + "\r\n选择部件为:" + objId + "(" + objName + ")" + + "\r\n部件大类为:" + largeType + + "\r\n小类为:" + smallType + + "\r\n确认提交?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * 事件 + */ + private void showDialog(String gridId, String communityName) { + if (!this.isFinishing()) { + new AlertControlDialog.Builder() + .setContext(this) + .setTitle("提示") + .setMessage("该事件所在地点网格为:[" + gridId + "]" + + "\r\n所在社区为:" + communityName + + "\r\n确认选择?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + Intent intent = new Intent(); + intent.putExtra("latitude", clickPoint.getY()); + intent.putExtra("longitude", clickPoint.getX()); + intent.putExtra("community", communityName); + intent.putExtra("gridId", gridId); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + public void onCancelClick() { + + } + }) + .build().show(); + } + } + + /** + * //[116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + private void addMarker(Point clickPoint) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 15); + if (overlayGraphics != null && graphicsOverlays != null) { + overlayGraphics.clear(); + graphicsOverlays.clear(); + } + Graphic graphic = new Graphic(clickPoint, simpleMarkerSymbol); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64); + pictureMarker.setHeight(42); + pictureMarker.loadAsync(); + + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.expandMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } else if (id == R.id.minusMapView) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } else if (id == R.id.removeToLocalView) { + DialogHelper.showLoadingDialog(this, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(this, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + if (aMapLocation != null) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800); + DialogHelper.dismissLoadingDialog(); + } + } + }, true); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java new file mode 100644 index 0000000..5a85a88 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/CaseOnMapActivity.java @@ -0,0 +1,380 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.MotionEvent; +import android.widget.RadioGroup; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapCaseBinding; +import com.casic.dcms.model.CaseHandleBean; +import com.casic.dcms.model.PointDataBean; +import com.casic.dcms.model.VerifyCaseModel; +import com.casic.dcms.model.check.CaseCheckModel; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.view.CaseDetailActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class CaseOnMapActivity extends AndroidxBaseActivity implements RadioGroup.OnCheckedChangeListener { + + private static final String TAG = "CaseOnMapActivity"; + private final Context context = this; + private CaseViewModel caseViewModel; + private ListenableList graphics; + private ListenableList graphicsOverlays; + private List casePointList = new ArrayList<>(); + private WeakReferenceHandler weakReferenceHandler; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + weakReferenceHandler = new WeakReferenceHandler(callback); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + //默认加载处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + arcGISMap.getOperationalLayers().addAll(Arrays.asList(communityLayer, pointLayer)); + viewBinding.mapView.setMap(arcGISMap); + + //Marker相关Layer + graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + caseViewModel.caseCheckModel.observe(this, new Observer() { + @Override + public void onChanged(CaseCheckModel resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseCheckModel.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_CHECK); + } else { + StringHub.show(context, "当前没有[待核查]的案卷"); + } + } + } + }); + + caseViewModel.caseHandleModel.observe(this, new Observer() { + @Override + public void onChanged(CaseHandleBean resultBean) { + clearPictureMarker(); + if (resultBean.isSuccess()) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (CaseHandleBean.DataDTO.RowsDTO bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_HANDLE); + } else { + StringHub.show(context, "当前没有[处理中]的案卷"); + } + } + } + }); + + caseViewModel.caseVerifyModel.observe(this, new Observer() { + @Override + public void onChanged(VerifyCaseModel resultBean) { + clearPictureMarker(); + if (resultBean.getCode() == 200) { + List rowsBeans = resultBean.getData().getRows(); + if (rowsBeans.size() >= 1) { + List list = new ArrayList<>(); + List pointList = new ArrayList<>(); + for (VerifyCaseModel.DataModel.RowsModel bean : rowsBeans) { + String lng = bean.getLng(); + String lat = bean.getLat(); + if (TextUtils.isEmpty(lng) || TextUtils.isEmpty(lat)) { + Log.d(TAG, "案卷经纬度异常"); + continue; + } + relatePointToCase(list, bean.getId(), lng, lat); + + Point point = new Point(Double.parseDouble(lng), Double.parseDouble(lat), SpatialReferences.getWgs84()); + pointList.add(point); + } + addPictureMarker(pointList, LocaleConstant.CASE_VERIFY); + } else { + StringHub.show(context, "当前没有[待核实]的案卷"); + } + } + } + }); + + viewBinding.radioGroup.setOnCheckedChangeListener(this); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + + final ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point point = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + for (PointDataBean dataBean : casePointList) { + double parseLng = Double.parseDouble(dataBean.getLng()); + double parseLat = Double.parseDouble(dataBean.getLat()); + if (Math.abs(parseLng - point.getX()) <= LocaleConstant.DELTA_LNG_10 && + Math.abs(parseLat - point.getY()) <= LocaleConstant.DELTA_LAT_10) { + Message message = weakReferenceHandler.obtainMessage(); + message.what = 2021051401; + message.obj = dataBean.getId(); + weakReferenceHandler.sendMessage(message); + } + } + } else { + weakReferenceHandler.sendEmptyMessage(2021051402); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + } + + private final Handler.Callback callback = msg -> { + switch (msg.what) { + case 2021051401: + String caseId = (String) msg.obj; + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("查看案卷详情") + .setMessage("ID:" + caseId) + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + ContextHub.navigatePageTo(context, CaseDetailActivity.class, caseId); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + break; + case 2021051402: + StringHub.show(this, "此附近无案卷,请重新选点"); + break; + default: + break; + } + return true; + }; + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.handleRadioButton) { + resetRadioButton(0); + } else if (checkedId == R.id.verifyRadioButton) { + resetRadioButton(1); + } else if (checkedId == R.id.checkRadioButton) { + resetRadioButton(2); + } + } + + private void resetRadioButton(int index) { + switch (index) { + case 0: + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求处置中数据 + caseViewModel.obtainHandleCaseList(null, null, 1, true); + break; + case 1: + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核实数据 + caseViewModel.obtainVerifyCaseList(1000, 1, false); + break; + case 2: + viewBinding.checkRadioButton.setTextColor(ContextCompat.getColor(this, R.color.white)); + viewBinding.verifyRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + viewBinding.handleRadioButton.setTextColor(ContextCompat.getColor(this, R.color.mainTextColor)); + + //请求待核查数据 + caseViewModel.obtainCheckCaseList(1000, 1, false); + break; + default: + break; + } + } + + /** + * 关联Marker和案卷 + * + * @param list 临时数据集合 + */ + private void relatePointToCase(List list, String id, String lng, String lat) { + PointDataBean casePoint = new PointDataBean(); + casePoint.setId(id); + casePoint.setLng(lng); + casePoint.setLat(lat); + list.add(casePoint); + casePointList = list; + } + + private void addPictureMarker(List points, int caseStatus) { + Bitmap caseBitmap; + switch (caseStatus) { + case LocaleConstant.CASE_HANDLE: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_handle); + break; + case LocaleConstant.CASE_VERIFY: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + break; + case LocaleConstant.CASE_CHECK: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_check); + break; + default: + caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_case); + break; + } + for (Point point : points) { + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setHeight(24); + pictureMarker.setWidth(24); + pictureMarker.loadAsync();//异步加载Marker,防止阻塞 + + GraphicsOverlay graphicsOverlay = new GraphicsOverlay(); + graphics = graphicsOverlay.getGraphics(); + graphics.add(new Graphic(point, pictureMarker)); + graphicsOverlays.add(graphicsOverlay); + } + } + + private void clearPictureMarker() { + if (graphics != null && graphicsOverlays != null) { + graphics.clear(); + graphicsOverlays.clear(); + } + } + + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java new file mode 100644 index 0000000..2b9f56f --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/DisplayMapActivity.java @@ -0,0 +1,146 @@ +package com.casic.dcms.view.map; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityGisBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.data.ServiceFeatureTable; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.layers.FeatureLayer; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.List; + +public class DisplayMapActivity extends AndroidxBaseActivity { + + private final Context context = DisplayMapActivity.this; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("位置查看"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + String caseType = getIntent().getStringExtra("caseType"); + double lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + double lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + + //社区 (ID: 13) + ServiceFeatureTable communityFeatureTable = ArcGisMapCreator.createGridFeatureTable(); + communityFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer communityLayer = new FeatureLayer(communityFeatureTable); + if ("部件".equals(caseType)) { //部件点图层 (ID: 2) + ServiceFeatureTable pointFeatureTable = ArcGisMapCreator.createOtherFeatureTable("部件点"); + pointFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); + FeatureLayer pointLayer = new FeatureLayer(pointFeatureTable); + + List layerList = new ArrayList<>(); + layerList.add(communityLayer); + layerList.add(pointLayer); + arcGISMap.getOperationalLayers().addAll(layerList); + } + viewBinding.mapView.setMap(arcGISMap); + /** + * [116.598359, 28.247870, 0.000000, NaN] SR: 4326 + */ + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); //标注到指定经纬度并放大地图显示 + //添加图片Marker + addPictureMarker(point); + } + + @Override + protected void initEvent() { + viewBinding.expandMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5)); + viewBinding.minusMapView.setOnClickListener(v -> viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2)); + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point point = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(point); + viewBinding.mapView.setViewpointCenterAsync(point, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.location_verify); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(24f); + pictureMarker.setHeight(24f); + pictureMarker.loadAsync(); + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java new file mode 100644 index 0000000..71c96b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WarningOnMapActivity.java @@ -0,0 +1,221 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityMapWarningBinding; +import com.casic.dcms.model.AlarmDataBean; +import com.casic.dcms.model.WellDetailBean; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.vm.AlarmViewModel; +import com.casic.dcms.vm.WellViewModel; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.symbology.SimpleMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.SaveKeyValues; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIDialog; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.ArrayList; +import java.util.List; + +public class WarningOnMapActivity extends AndroidxBaseActivity { + + private static final String TAG = "WarningOnMapActivity"; + private final Context context = this; + private final List geometryList = new ArrayList<>(); + private AlarmViewModel alarmViewModel; + private WellViewModel wellViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("报警分布"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + viewBinding.mapView.setAttributionTextVisible(false);//去掉左下角属性标识 + viewBinding.mapView.setViewpointScaleAsync(64000); + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap basemap = new Basemap(ArcGisMapCreator.createNoGridLayer()); + arcGISMap.setBasemap(basemap); + viewBinding.mapView.setMap(arcGISMap); + + int alarmTotal = (int) SaveKeyValues.getValue("alarmTotal", LocaleConstant.PAGE_LIMIT); + alarmViewModel = new ViewModelProvider(this).get(AlarmViewModel.class); + alarmViewModel.obtainAlarmList(alarmTotal, 1); + + wellViewModel = new ViewModelProvider(this).get(WellViewModel.class); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + alarmViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(AlarmDataBean alarmDataBean) { + if (alarmDataBean.getCode() == 200) { + List dataRows = alarmDataBean.getData().getRows(); + for (AlarmDataBean.DataBean.RowsBean rowsBean : dataRows) { + String queryParam = "编号='" + rowsBean.getWellCode() + "'"; + wellViewModel.obtainWellDetail(queryParam); + } + } + } + }); + + alarmViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + wellViewModel.resultModel.observe(this, new Observer() { + @Override + public void onChanged(WellDetailBean wellDetailBean) { + List features = wellDetailBean.getFeatures(); + if (features.size() > 0) { + WellDetailBean.FeaturesBean featuresBean = features.get(0); + //将获取到的井数据缓存起来 + geometryList.add(featuresBean); + WellDetailBean.FeaturesBean.GeometryBean geometryBean = featuresBean.getGeometry(); + //每获取一个点就绘制出 + addMarker(new Point(geometryBean.getX(), geometryBean.getY())); + } + } + }); + + wellViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + + } + }); + + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())); + Point clickPoint = viewBinding.mapView.screenToLocation(screenPoint); + if (geometryList.size() > 0) { + List tempList = new ArrayList<>(); + for (WellDetailBean.FeaturesBean featuresBean : geometryList) { + WellDetailBean.FeaturesBean.GeometryBean dataBean = featuresBean.getGeometry(); + if (Math.abs(dataBean.getX() - clickPoint.getX()) <= 10 * LocaleConstant.DELTA_LNG_10 && + Math.abs(dataBean.getY() - clickPoint.getY()) <= 10 * LocaleConstant.DELTA_LNG_10) { + tempList.add(featuresBean); + } + } + if (tempList.size() > 0) { + QMUIDialog.MenuDialogBuilder menuDialogBuilder = new QMUIDialog.MenuDialogBuilder(context); + menuDialogBuilder.setTitle("请选择您要查看的窨井"); + for (WellDetailBean.FeaturesBean dataBean : tempList) { + menuDialogBuilder.addItem(dataBean.getAttributes().get编号(), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + View popupView = LayoutInflater.from(context).inflate(R.layout.popu_well, null); + TextView wellCodeView = popupView.findViewById(R.id.wellCodeView); + TextView wellTypeView = popupView.findViewById(R.id.wellTypeView); + TextView wellPositionView = popupView.findViewById(R.id.wellPositionView); + + WellDetailBean.FeaturesBean.AttributesBean attributes = dataBean.getAttributes(); + wellCodeView.setText(attributes.get编号()); + wellTypeView.setText(attributes.get附属物名称()); + wellPositionView.setText(attributes.get所属道路()); + + QMUIPopups.popup(context, QMUIDisplayHelper.dp2px(context, 290)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(context, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } + }); + } + menuDialogBuilder.create().show(); + } + } + return super.onSingleTapConfirmed(e); + } + }); + } + + protected void onResume() { + viewBinding.mapView.resume(); + super.onResume(); + } + + @Override + protected void onPause() { + viewBinding.mapView.pause(); + super.onPause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } + + private void addMarker(Point point) { + SimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 10); + Graphic graphic = new Graphic(point, simpleMarkerSymbol); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java new file mode 100644 index 0000000..dbc2716 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/map/WorkerOnMapActivity.java @@ -0,0 +1,210 @@ +package com.casic.dcms.view.map; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.amap.api.location.AMapLocation; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityWorkerMapBinding; +import com.casic.dcms.utils.ArcGisMapCreator; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.LocationHelper; +import com.casic.dcms.utils.callback.ILocationListener; +import com.esri.arcgisruntime.concurrent.ListenableFuture; +import com.esri.arcgisruntime.geometry.Point; +import com.esri.arcgisruntime.geometry.SpatialReferences; +import com.esri.arcgisruntime.mapping.ArcGISMap; +import com.esri.arcgisruntime.mapping.Basemap; +import com.esri.arcgisruntime.mapping.BasemapStyle; +import com.esri.arcgisruntime.mapping.view.DefaultMapViewOnTouchListener; +import com.esri.arcgisruntime.mapping.view.Graphic; +import com.esri.arcgisruntime.mapping.view.GraphicsOverlay; +import com.esri.arcgisruntime.mapping.view.IdentifyGraphicsOverlayResult; +import com.esri.arcgisruntime.symbology.PictureMarkerSymbol; +import com.esri.arcgisruntime.util.ListenableList; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.utils.WeakReferenceHandler; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; + +import java.util.List; +import java.util.concurrent.ExecutionException; + +public class WorkerOnMapActivity extends AndroidxBaseActivity { + + private final Context context = WorkerOnMapActivity.this; + private WeakReferenceHandler weakReferenceHandler; + private String userName; + private String createTime; + private String toiletName; + private double lng = 0.0; + private double lat = 0.0; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("查看位置"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + userName = getIntent().getStringExtra("userName"); + createTime = getIntent().getStringExtra("createTime"); + toiletName = getIntent().getStringExtra("toiletName"); + lng = getIntent().getDoubleExtra("lng", LocaleConstant.DEFAULT_LNG); + lat = getIntent().getDoubleExtra("lat", LocaleConstant.DEFAULT_LAT); + viewBinding.mapView.setAttributionTextVisible(false); //去掉左下角属性标识 + ArcGISMap arcGISMap = new ArcGISMap(BasemapStyle.ARCGIS_STREETS); + //创建底图、并设置底图图层 + Basemap baseMap = new Basemap(ArcGisMapCreator.createBaseLayer()); + arcGISMap.setBasemap(baseMap); + viewBinding.mapView.setMap(arcGISMap); + weakReferenceHandler = new WeakReferenceHandler(callback); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + protected void initEvent() { + Point point = new Point(lng, lat, SpatialReferences.getWgs84()); + viewBinding.mapView.setViewpointCenterAsync(point, 64000.0); //标注到指定经纬度并放大地图显示 + addPictureMarker(point); + viewBinding.mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, viewBinding.mapView) { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + android.graphics.Point screenPoint = new android.graphics.Point((int) e.getX(), (int) e.getY()); + ListenableFuture> overlaysAsync = mMapView.identifyGraphicsOverlaysAsync(screenPoint, 10.0, false, 1); + overlaysAsync.addDoneListener(new Runnable() { + @Override + public void run() { + try { + List overlayResultList = overlaysAsync.get(); + if (!overlayResultList.isEmpty()) { + IdentifyGraphicsOverlayResult identifyResult = overlayResultList.get(0); + Point p = identifyResult.getGraphicsOverlay().getExtent().getCenter(); + if (Math.abs(lng - p.getX()) <= LocaleConstant.DELTA_LNG_10 && Math.abs(lat - p.getY()) <= LocaleConstant.DELTA_LAT_10) { + weakReferenceHandler.sendEmptyMessage(2021060101); + } + } else { + weakReferenceHandler.sendEmptyMessage(2021060102); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + }); + return super.onSingleTapConfirmed(e); + } + }); + + viewBinding.expandMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 0.5); + } + }); + + viewBinding.minusMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + viewBinding.mapView.setViewpointScaleAsync(viewBinding.mapView.getMapScale() * 2); + } + }); + + viewBinding.removeToLocalView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + DialogHelper.showLoadingDialog(context, "定位中,请稍后"); + LocationHelper.obtainCurrentLocation(context, new ILocationListener() { + + @Override + public void onAMapLocationGet(AMapLocation aMapLocation) { + double[] gcjToWgs = LocationHelper.gcjToWgs(aMapLocation.getLongitude(), aMapLocation.getLatitude()); + Point p = new Point(gcjToWgs[0], gcjToWgs[1], SpatialReferences.getWgs84()); + addPictureMarker(p); + viewBinding.mapView.setViewpointCenterAsync(p, 2800.0); + DialogHelper.dismissLoadingDialog(); + } + }, true); + } + }); + } + + private final Handler.Callback callback = msg -> { + if (msg.what == 2021060101) { + View popupView = LayoutInflater.from(this).inflate(R.layout.popu_worker, null); + TextView userNameView = popupView.findViewById(R.id.userNameView); + TextView signInTimeView = popupView.findViewById(R.id.signInTimeView); + TextView toiletNameView = popupView.findViewById(R.id.toiletNameView); + userNameView.setText(userName); + signInTimeView.setText(createTime); + toiletNameView.setText(toiletName); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 250)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(popupView) + .edgeProtection(QMUIDisplayHelper.dp2px(this, 20)) + .dimAmount(0.6f) + .animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER) + .onDismiss(null) + .show(viewBinding.mapView); + } else if (msg.what == 2021060102) { + StringHub.show(this, "附近无工作人员,请重新选点"); + } + return true; + }; + + private void addPictureMarker(Point point) { + Bitmap caseBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.on_line); + BitmapDrawable caseDrawable = new BitmapDrawable(getResources(), caseBitmap); + PictureMarkerSymbol pictureMarker = new PictureMarkerSymbol(caseDrawable); + pictureMarker.setWidth(64f); + pictureMarker.setHeight(42f); + pictureMarker.loadAsync(); //异步加载Marker,防止阻塞 + Graphic graphic = new Graphic(point, pictureMarker); + GraphicsOverlay mGraphicsOverlay = new GraphicsOverlay(); + ListenableList overlayGraphics = mGraphicsOverlay.getGraphics(); + ListenableList graphicsOverlays = viewBinding.mapView.getGraphicsOverlays(); + overlayGraphics.add(graphic); + graphicsOverlays.add(mGraphicsOverlay); + } + + @Override + protected void onResume() { + super.onResume(); + viewBinding.mapView.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + viewBinding.mapView.pause(); + } + + @Override + protected void onDestroy() { + viewBinding.mapView.dispose(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java index 83aaabb..fc4e5bb 100644 --- a/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java +++ b/app/src/main/java/com/casic/dcms/view/toilet/CleaningRecordsActivity.java @@ -17,7 +17,7 @@ import com.casic.dcms.model.CleanRecordBean; import com.casic.dcms.utils.DialogHelper; import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.WorkerOnMapActivity; +import com.casic.dcms.view.map.WorkerOnMapActivity; import com.casic.dcms.vm.ToiletViewModel; import com.casic.dcms.widgets.DateSelectDialog; import com.gyf.immersionbar.ImmersionBar; diff --git a/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java new file mode 100644 index 0000000..2d2e8f6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BriefCaseActivity.java @@ -0,0 +1,362 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBriefCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BriefCaseActivity extends AndroidxBaseActivity { + + private final Context context = BriefCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真是图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private EditableImageAdapter imageAdapter; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + + private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("快速上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //根据情况加载不同图层 + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + quickCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "1", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), "", "", 0, 0); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java new file mode 100644 index 0000000..59b37b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/BusinessCaseActivity.java @@ -0,0 +1,226 @@ +package com.casic.dcms.view.upload; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityBusinessCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +public class BusinessCaseActivity extends AndroidxBaseActivity { + + private final Context context = BusinessCaseActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private UploadViewModel uploadViewModel; + private CaseViewModel caseViewModel; + private EditableImageAdapter imageAdapter; + private String gridId, shopID; + + private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String shopName = data.getStringExtra("shopName"); + shopID = data.getStringExtra("shopID"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + viewBinding.shopView.setText(shopName); + viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("三包上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @Override + public void initEvent() { + viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", "三包上报"); + packageCaseLauncher.launch(intent); + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(shopKeeper)) { + StringHub.show(this, "店主名还未填写"); + return; + } + String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(phoneNumber)) { + StringHub.show(this, "电话号码还未填写"); + return; + } + if (StringHub.isPhoneNumber(phoneNumber)) { + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitShopCase("0", "0", longitude, latitude, + "2", "1", + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), + 0, 0, shopID, shopKeeper, phoneNumber); + } else { + StringHub.show(this, "电话号码格式不对"); + } + } +} diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java new file mode 100644 index 0000000..c2a889b --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseActivity.java @@ -0,0 +1,635 @@ +package com.casic.dcms.view.upload; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCommonCaseBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.FileUtils; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; +import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; +import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; +import com.qmuiteam.qmui.util.QMUIDisplayHelper; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; +import com.qmuiteam.qmui.widget.popup.QMUIPopup; +import com.qmuiteam.qmui.widget.popup.QMUIPopups; +import com.zolad.videoslimmer.VideoSlimmer; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class CommonCaseActivity extends AndroidxBaseActivity { + + private static final String TAG = "CommonCaseActivity"; + private final Context context = CommonCaseActivity.this; + private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private ProgressDialog progressDialog; + private EditableImageAdapter imageAdapter; + private AudioRecodeHelper audioRecodeHelper; + private String eorc = ""; + private String typeCode = ""; + private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 + private String gridId; + private String audioUrl, videoUrl; + private boolean isFirstEnter = true; + + private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + double longitude = data.getDoubleExtra("longitude", 0); + double latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + + viewBinding.longitudeView.setText(String.valueOf(longitude)); + viewBinding.latitudeView.setText(String.valueOf(latitude)); + viewBinding.communityNameView.setText(community); + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷上报"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage("视频压缩中..."); + progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); + progressDialog.setCancelable(false); + progressDialog.setCanceledOnTouchOutside(false); + + /** + * 计算 +图标 大小 + * + * CarrView水平外边距5dp + * RelativeLayout水平内边距10dp + * RecyclerView左边距100dp + * */ + int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); + int margins = FloatHub.dp2px(this, 3); + int itemSize = (realWidth - 4 * margins) / 3; + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); + params.setMargins(margins, margins, margins, margins); + params.gravity = Gravity.LEFT; + viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); + viewBinding.addVideoView.setLayoutParams(params); + + //图片九宫格 + imageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(imageAdapter); + } + + @SuppressLint("ClickableViewAccessibility") + @Override + public void initEvent() { + /** + * 选择案卷类型 + * */ + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseClassView.setText(tag); + viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() != 0) { + viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallClassView.setText("请选择"); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); + } + } + }); + + /** + * 选择案卷大类 + * */ + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseLargeClassView.setText(tag); + viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + typeCode = dataBean.getTypeCode(); + String typeId = dataBean.getId(); + + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置小类数据 + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() != 0) { + viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + } + } + } + }); + + /** + * 选择案卷小类 + * */ + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseSmallClassView.setText(tag); + viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); + + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + } + }).build().show(); + } + } + }); + + /** + * 选择经纬度 + * */ + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseClassView.getText().toString(); + if (type.equals("")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + uploadCaseLauncher.launch(intent); + } + }); + + /** + * 案卷录音 + * */ + AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { + @Override + public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { + viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); + window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); + audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseActivity.this).toString()); + break; + case MotionEvent.ACTION_UP: + audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) + window.dismiss(); + viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); + break; + } + return true; + } + }); + + audioRecodeHelper = new AudioRecodeHelper(); + audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { + @Override + public void onUpdate(double db, long time) { + imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); + textView.setText(LongHub.millsToTime(time)); + } + + @Override + public void onStop(String filePath) { + uploadViewModel.uploadAudio(new File(filePath)); + } + }); + } + }); + + /** + * 案卷视频 + * */ + viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PictureSelectorHelper.takeVideo(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + LocalMedia media = result.get(0); + //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" + //需要手动压缩视频 + String mediaRealPath = media.getRealPath(); + if (TextUtils.isEmpty(mediaRealPath)) { + //部分手机getRealPath可能为空,需要备用路径 + mediaRealPath = media.getPath(); + } + if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { + //如果默认和备用路径还是为空,则不压缩上传 + StringHub.show(context, "请先选择案卷类型"); + return; + } + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + retriever.setDataSource(mediaRealPath); + String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); + + assert defaultRotation != null; + compressVideo(mediaRealPath, defaultRotation, defaultBitrate); + } + }); + } + }); + + /** + * 重拍视频 + * */ + viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (viewBinding.videoPlayerView.isShown()) { + new AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("确定重新拍摄视频材料?") + .setNegativeButton("取消") + .setPositiveButton("确定") + .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { + @Override + public void onConfirmClick() { + viewBinding.videoPlayerView.setVisibility(View.GONE); + viewBinding.addVideoView.setVisibility(View.VISIBLE); + } + + @Override + public void onCancelClick() { + + } + }).build().show(); + } + } + }); + + /** + * 图片九宫格事件处理 + * */ + imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + imageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + if (imageAdapter.getItemCount() <= 4) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + imageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.audioModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + audioUrl = resultBean.getData(); + /** + * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a + * */ + if (!TextUtils.isEmpty(audioUrl)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); + } + } + } + }); + uploadViewModel.videoModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.getCode() == 200) { + //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 + viewBinding.addVideoView.setVisibility(View.GONE); + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + videoUrl = resultBean.getData(); + String completeURL = StringHelper.appendCompleteURL(videoUrl); + viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(completeURL) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "提交失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + /** + * 6.0以上视频压缩 + */ + private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { + Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); + String outputVideoFile = FileUtils.getOutputVideoFile(); + int width, height, bitrate; + if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 + width = LocaleConstant.DEFAULT_WIDTH / 2; + height = LocaleConstant.DEFAULT_HEIGHT / 2; + } else { + width = LocaleConstant.DEFAULT_HEIGHT / 2; + height = LocaleConstant.DEFAULT_WIDTH / 2; + } + if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { + bitrate = LocaleConstant.BITRATE; + } else { + bitrate = Integer.parseInt(defaultBitrate) / 2; + } + VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { + @Override + public void onStart() { + progressDialog.show(); + } + + @Override + public void onProgress(float percent) { + progressDialog.setProgress((int) percent); + } + + @Override + public void onFinish(boolean result) { + if (result) { + uploadViewModel.uploadVideo(new File(outputVideoFile)); + } else { + StringHub.show(CommonCaseActivity.this, "请先选择案卷类型"); + } + progressDialog.dismiss(); + } + }); + } + + /** + * 首次进入页面显示引导Popup + */ + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (isFirstEnter) { + TextView textView = new TextView(this); + int padding = QMUIDisplayHelper.dp2px(this, 10); + textView.setPadding(padding, padding, padding, padding); + textView.setGravity(Gravity.CENTER); + textView.setText("按住即可开始录音"); + QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) + .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) + .view(textView) + .shadow(true) + .arrow(true) + .animStyle(QMUIPopup.ANIM_AUTO) + .dimAmount(0.6f)//60%透明度 + .onDismiss(null) + .show(viewBinding.recodeAudioButton); + isFirstEnter = false; + } + } + + /** + * 案卷提交 + */ + private void submitCase() { + String longitude = viewBinding.longitudeView.getText().toString(); + String latitude = viewBinding.latitudeView.getText().toString(); + if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + if (eorc.equals("") || typeCode.equals("")) { + StringHub.show(this, "案卷大类还未选择"); + return; + } + if (typeDetailCode.equals("")) { + StringHub.show(this, "案卷小类还未选择"); + return; + } + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新地图选点"); + return; + } + String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + return; + } + String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); + if (TextUtils.isEmpty(description)) { + StringHub.show(this, "案卷情况还未填写"); + return; + } + caseViewModel.submitCase("0", "0", longitude, latitude, + "2", "1", eorc, typeCode, typeDetailCode, + gridId.substring(0, 6), + gridId.substring(0, 9), + gridId.substring(0, 12), + gridId, description, fieldIntro, + StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java deleted file mode 100644 index 9b96c13..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/CommonCaseUploadActivity.java +++ /dev/null @@ -1,634 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.media.MediaMetadataRetriever; -import android.text.TextUtils; -import android.util.Log; -import android.view.Gravity; -import android.view.MotionEvent; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.PopupWindow; -import android.widget.TextView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadCommonCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.FileUtils; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.FloatHub; -import com.pengxh.androidx.lite.hub.LongHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.pengxh.androidx.lite.widget.audio.AudioPopupWindow; -import com.pengxh.androidx.lite.widget.audio.AudioRecodeHelper; -import com.pengxh.androidx.lite.widget.dialog.AlertControlDialog; -import com.qmuiteam.qmui.util.QMUIDisplayHelper; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; -import com.qmuiteam.qmui.widget.popup.QMUIPopup; -import com.qmuiteam.qmui.widget.popup.QMUIPopups; -import com.zolad.videoslimmer.VideoSlimmer; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CommonCaseUploadActivity extends AndroidxBaseActivity { - - private static final String TAG = "CaseUploadActivity"; - private final Context context = CommonCaseUploadActivity.this; - private final List imageList = new ArrayList<>();//服务器返回的拍照数据集 - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private ProgressDialog progressDialog; - private EditableImageAdapter imageAdapter; - private AudioRecodeHelper audioRecodeHelper; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - private String audioUrl, videoUrl; - private boolean isFirstEnter = true; - - private final ActivityResultLauncher uploadCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - progressDialog = new ProgressDialog(this); - progressDialog.setMessage("视频压缩中..."); - progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - progressDialog.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.bg_progress, null)); - progressDialog.setCancelable(false); - progressDialog.setCanceledOnTouchOutside(false); - - /** - * 计算 +图标 大小 - * - * CarrView水平外边距5dp - * RelativeLayout水平内边距10dp - * RecyclerView左边距100dp - * */ - int realWidth = ContextHub.getScreenWidth(this) - FloatHub.dp2px(this, 40); - int margins = FloatHub.dp2px(this, 3); - int itemSize = (realWidth - 4 * margins) / 3; - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(itemSize, itemSize); - params.setMargins(margins, margins, margins, margins); - params.gravity = Gravity.LEFT; - viewBinding.addVideoView.setScaleType(ImageView.ScaleType.CENTER_CROP); - viewBinding.addVideoView.setLayoutParams(params); - - //图片九宫格 - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @SuppressLint("ClickableViewAccessibility") - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - uploadCaseLauncher.launch(intent); - } - }); - - /** - * 案卷录音 - * */ - AudioPopupWindow.create(this, new AudioPopupWindow.IWindowListener() { - @Override - public void onViewCreated(PopupWindow window, ImageView imageView, TextView textView) { - viewBinding.recodeAudioButton.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - viewBinding.recodeAudioButton.animate().scaleX(0.75f).scaleY(0.75f).setDuration(100).start(); - window.showAtLocation(viewBinding.caseLayout, Gravity.CENTER, 0, 0); - audioRecodeHelper.startRecordAudio(ContextHub.createAudioFile(CommonCaseUploadActivity.this).toString()); - break; - case MotionEvent.ACTION_UP: - audioRecodeHelper.stopRecordAudio();//结束录音(保存录音文件) - window.dismiss(); - viewBinding.recodeAudioButton.animate().scaleX(1.0f).scaleY(1.0f).setDuration(100).start(); - break; - } - return true; - } - }); - - audioRecodeHelper = new AudioRecodeHelper(); - audioRecodeHelper.setOnAudioStatusUpdateListener(new AudioRecodeHelper.OnAudioStatusUpdateListener() { - @Override - public void onUpdate(double db, long time) { - imageView.getDrawable().setLevel((int) (3000 + 6000 * db / 100)); - textView.setText(LongHub.millsToTime(time)); - } - - @Override - public void onStop(String filePath) { - uploadViewModel.uploadAudio(new File(filePath)); - } - }); - } - }); - - /** - * 案卷视频 - * */ - viewBinding.addVideoView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - PictureSelectorHelper.takeVideo(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - LocalMedia media = result.get(0); - //"realPath":"/storage/emulated/0/Movies/VID_20210426_17552226.mp4" - //需要手动压缩视频 - String mediaRealPath = media.getRealPath(); - if (TextUtils.isEmpty(mediaRealPath)) { - //部分手机getRealPath可能为空,需要备用路径 - mediaRealPath = media.getPath(); - } - if (TextUtils.isEmpty(mediaRealPath) || mediaRealPath.equals("")) { - //如果默认和备用路径还是为空,则不压缩上传 - StringHub.show(context, "请先选择案卷类型"); - return; - } - MediaMetadataRetriever retriever = new MediaMetadataRetriever(); - retriever.setDataSource(mediaRealPath); - String defaultRotation = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); - String defaultBitrate = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE); - - assert defaultRotation != null; - compressVideo(mediaRealPath, defaultRotation, defaultBitrate); - } - }); - } - }); - - /** - * 重拍视频 - * */ - viewBinding.deleteView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (viewBinding.videoPlayerView.isShown()) { - new AlertControlDialog.Builder() - .setContext(context) - .setTitle("提示") - .setMessage("确定重新拍摄视频材料?") - .setNegativeButton("取消") - .setPositiveButton("确定") - .setOnDialogButtonClickListener(new AlertControlDialog.OnDialogButtonClickListener() { - @Override - public void onConfirmClick() { - viewBinding.videoPlayerView.setVisibility(View.GONE); - viewBinding.addVideoView.setVisibility(View.VISIBLE); - } - - @Override - public void onCancelClick() { - - } - }).build().show(); - } - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.audioModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - audioUrl = resultBean.getData(); - /** - * http://111.198.10.15:11409/static/2021-04/8fb86dae39ad4f949e934e25465d7382.m4a - * */ - if (!TextUtils.isEmpty(audioUrl)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioUrl)); - } - } - } - }); - uploadViewModel.videoModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - //2021-04\\9d89df21173043cfb4188e68613e3e0e.mp4 - viewBinding.addVideoView.setVisibility(View.GONE); - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - videoUrl = resultBean.getData(); - String completeURL = StringHelper.appendCompleteURL(videoUrl); - viewBinding.videoPlayerView.setUp(completeURL, "", Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(completeURL) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 6.0以上视频压缩 - */ - private void compressVideo(String mediaRealPath, String defaultRotation, String defaultBitrate) { - Log.d(TAG, "defaultRotation: " + defaultRotation + ", defaultBitrate: " + defaultBitrate); - String outputVideoFile = FileUtils.getOutputVideoFile(); - int width, height, bitrate; - if (defaultRotation.equals("90")) {//视频为竖屏,0为横屏 - width = LocaleConstant.DEFAULT_WIDTH / 2; - height = LocaleConstant.DEFAULT_HEIGHT / 2; - } else { - width = LocaleConstant.DEFAULT_HEIGHT / 2; - height = LocaleConstant.DEFAULT_WIDTH / 2; - } - if (TextUtils.isEmpty(defaultBitrate) || defaultBitrate.equals("")) { - bitrate = LocaleConstant.BITRATE; - } else { - bitrate = Integer.parseInt(defaultBitrate) / 2; - } - VideoSlimmer.convertVideo(mediaRealPath, outputVideoFile, width, height, LocaleConstant.BITRATE, new VideoSlimmer.ProgressListener() { - @Override - public void onStart() { - progressDialog.show(); - } - - @Override - public void onProgress(float percent) { - progressDialog.setProgress((int) percent); - } - - @Override - public void onFinish(boolean result) { - if (result) { - uploadViewModel.uploadVideo(new File(outputVideoFile)); - } else { - StringHub.show(CommonCaseUploadActivity.this, "请先选择案卷类型"); - } - progressDialog.dismiss(); - } - }); - } - - /** - * 首次进入页面显示引导Popup - */ - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (isFirstEnter) { - TextView textView = new TextView(this); - int padding = QMUIDisplayHelper.dp2px(this, 10); - textView.setPadding(padding, padding, padding, padding); - textView.setGravity(Gravity.CENTER); - textView.setText("按住即可开始录音"); - QMUIPopups.popup(this, QMUIDisplayHelper.dp2px(this, 150)) - .preferredDirection(QMUIPopup.DIRECTION_BOTTOM) - .view(textView) - .shadow(true) - .arrow(true) - .animStyle(QMUIPopup.ANIM_AUTO) - .dimAmount(0.6f)//60%透明度 - .onDismiss(null) - .show(viewBinding.recodeAudioButton); - isFirstEnter = false; - } - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "2", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), audioUrl, videoUrl, 0, 0); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java deleted file mode 100644 index bec9609..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/PackageCaseUploadActivity.java +++ /dev/null @@ -1,225 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadPackageCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class PackageCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = PackageCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private UploadViewModel uploadViewModel; - private CaseViewModel caseViewModel; - private EditableImageAdapter imageAdapter; - private String gridId, shopID; - - private final ActivityResultLauncher packageCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String shopName = data.getStringExtra("shopName"); - shopID = data.getStringExtra("shopID"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - viewBinding.shopView.setText(shopName); - viewBinding.shopView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("三包上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - viewBinding.shopLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", "三包上报"); - packageCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - String shopKeeper = viewBinding.shopKeeperView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(shopKeeper)) { - StringHub.show(this, "店主名还未填写"); - return; - } - String phoneNumber = viewBinding.phoneNumberView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(phoneNumber)) { - StringHub.show(this, "电话号码还未填写"); - return; - } - if (StringHub.isPhoneNumber(phoneNumber)) { - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitShopCase("0", "0", longitude, latitude, - "2", "1", - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), - 0, 0, shopID, shopKeeper, phoneNumber); - } else { - StringHub.show(this, "电话号码格式不对"); - } - } -} diff --git a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java b/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java deleted file mode 100644 index a75b868..0000000 --- a/app/src/main/java/com/casic/dcms/view/upload/QuickCaseUploadActivity.java +++ /dev/null @@ -1,361 +0,0 @@ -package com.casic.dcms.view.upload; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityUploadQuickCaseBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -public class QuickCaseUploadActivity extends AndroidxBaseActivity { - - private final Context context = QuickCaseUploadActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真是图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private EditableImageAdapter imageAdapter; - private String eorc = ""; - private String typeCode = ""; - private String typeDetailCode = "";//默认值,防止用户不选择直接跳过 - private String gridId; - - private final ActivityResultLauncher quickCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - double longitude = data.getDoubleExtra("longitude", 0); - double latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - - viewBinding.longitudeView.setText(String.valueOf(longitude)); - viewBinding.latitudeView.setText(String.valueOf(latitude)); - viewBinding.communityNameView.setText(community); - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("快速上报"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - - imageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(imageAdapter); - } - - @Override - public void initEvent() { - /** - * 选择案卷类型 - * */ - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseClassView.setText(tag); - viewBinding.caseClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() != 0) { - viewBinding.caseLargeClassView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallClassView.setText("请选择"); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.darkGray)); - } - } - }); - - /** - * 选择案卷大类 - * */ - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseLargeClassView.setText(tag); - viewBinding.caseLargeClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - typeCode = dataBean.getTypeCode(); - String typeId = dataBean.getId(); - - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置小类数据 - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() != 0) { - viewBinding.caseSmallClassView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - } - } - } - }); - - /** - * 选择案卷小类 - * */ - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseSmallClassView.setText(tag); - viewBinding.caseSmallClassView.setTextColor(ContextCompat.getColor(context, R.color.mainTextColor)); - - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - } - }).build().show(); - } - } - }); - - /** - * 选择经纬度 - * */ - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - //根据情况加载不同图层 - String type = viewBinding.caseClassView.getText().toString(); - if (type.equals("")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - quickCaseLauncher.launch(intent); - } - }); - - /** - * 图片九宫格事件处理 - * */ - imageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - imageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.getCode() == 200) { - if (imageAdapter.getItemCount() <= 4) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - imageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷提交中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "提交失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - /** - * 案卷提交 - */ - private void submitCase() { - String longitude = viewBinding.longitudeView.getText().toString(); - String latitude = viewBinding.latitudeView.getText().toString(); - if (longitude.equals("0") || latitude.equals("0") || TextUtils.isEmpty(longitude) || TextUtils.isEmpty(latitude)) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - if (eorc.equals("") || typeCode.equals("")) { - StringHub.show(this, "案卷大类还未选择"); - return; - } - if (typeDetailCode.equals("")) { - StringHub.show(this, "案卷小类还未选择"); - return; - } - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新地图选点"); - return; - } - String fieldIntro = viewBinding.caseLocationView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - return; - } - String description = viewBinding.caseDetailEditView.getText().toString().trim().replace(" ", ""); - if (TextUtils.isEmpty(description)) { - StringHub.show(this, "案卷情况还未填写"); - return; - } - caseViewModel.submitCase("0", "0", longitude, latitude, - "1", "1", eorc, typeCode, typeDetailCode, - gridId.substring(0, 6), - gridId.substring(0, 9), - gridId.substring(0, 12), - gridId, description, fieldIntro, - StringHelper.reformatURL(imageList), "", "", 0, 0); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java deleted file mode 100644 index b680e8f..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifiedDetailActivity.java +++ /dev/null @@ -1,170 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.content.Context; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifiedDetailBinding; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.util.ArrayList; - -import cn.jzvd.Jzvd; - -public class CaseVerifiedDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifiedDetailActivity.this; - private CaseViewModel caseViewModel; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷详情"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - String id = getIntent().getStringExtra(Constant.INTENT_PARAM); - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - caseViewModel.obtainCaseDetail(id); - } - - @Override - protected void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //图片 - String verifyImages = data.getFileIdVerify(); - if (!TextUtils.isEmpty(verifyImages)) { - ArrayList urls = new ArrayList<>(); - String[] split = verifyImages.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int position, long l) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp( - videoUrl, - StringHub.filterSpaceOrEnter(data.getDescription()), - Jzvd.SCREEN_NORMAL - ); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - }); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - public void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java deleted file mode 100644 index 4a8a8ef..0000000 --- a/app/src/main/java/com/casic/dcms/view/verify/CaseVerifyDetailActivity.java +++ /dev/null @@ -1,522 +0,0 @@ -package com.casic.dcms.view.verify; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.text.TextUtils; -import android.view.View; -import android.widget.AdapterView; - -import androidx.activity.result.ActivityResult; -import androidx.activity.result.ActivityResultCallback; -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.request.RequestOptions; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseVerifyDetailBinding; -import com.casic.dcms.model.ActionResultBean; -import com.casic.dcms.model.CaseDetailBean; -import com.casic.dcms.model.CaseLargeTypeBean; -import com.casic.dcms.model.CaseNextNodeBean; -import com.casic.dcms.model.CaseSmallTypeBean; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.MapHelper; -import com.casic.dcms.utils.PictureSelectorHelper; -import com.casic.dcms.utils.StringHelper; -import com.casic.dcms.utils.callback.ISelectorListener; -import com.casic.dcms.view.ArcGISMapActivity; -import com.casic.dcms.view.BigImageActivity; -import com.casic.dcms.vm.CaseOperateViewModel; -import com.casic.dcms.vm.CaseViewModel; -import com.casic.dcms.vm.CommonDataViewModel; -import com.casic.dcms.vm.NodeViewModel; -import com.casic.dcms.vm.UploadViewModel; -import com.gyf.immersionbar.ImmersionBar; -import com.luck.picture.lib.entity.LocalMedia; -import com.pengxh.androidx.lite.adapter.EditableImageAdapter; -import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.hub.StringHub; -import com.pengxh.androidx.lite.utils.Constant; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import cn.jzvd.Jzvd; - -public class CaseVerifyDetailActivity extends AndroidxBaseActivity { - - private final Context context = CaseVerifyDetailActivity.this; - private final ArrayList realPaths = new ArrayList<>();//真实图片路径 - private final List imageList = new ArrayList<>();//上传到服务器的数据集 - private CaseViewModel caseViewModel; - private CommonDataViewModel commonDataViewModel; - private UploadViewModel uploadViewModel; - private NodeViewModel nodeViewModel; - private CaseOperateViewModel operateViewModel; - private List largeTypeBeans; - private List smallTypeBeans; - private String id; - private String eorc; - private String typeCode; - private String typeDetailCode; - private String gridId;//可能来自案卷详情,也可能来自地图选点 - private double longitude, latitude; - private String changeState; - private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); - private EditableImageAdapter verifyImageAdapter; - - private final ActivityResultLauncher verifyCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { - @Override - public void onActivityResult(ActivityResult result) { - if (result.getResultCode() == Activity.RESULT_OK) { - Intent data = result.getData(); - if (data == null) { - return; - } - longitude = data.getDoubleExtra("longitude", 0); - latitude = data.getDoubleExtra("latitude", 0); - gridId = data.getStringExtra("gridId"); - String community = data.getStringExtra("community"); - String casePlace = data.getStringExtra("pos"); - viewBinding.caseCommunityView.setText(community); - if (TextUtils.isEmpty(casePlace)) { - viewBinding.casePlaceView.setText(community); - } else { - viewBinding.casePlaceView.setText(casePlace); - } - } - } - }); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷核实"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - } - - @Override - protected void observeRequestState() { - - } - - @Override - public void initData() { - id = getIntent().getStringExtra(Constant.INTENT_PARAM); - - largeTypeBeans = new ArrayList<>(); - smallTypeBeans = new ArrayList<>(); - - caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); - commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); - uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); - nodeViewModel = new ViewModelProvider(this).get(NodeViewModel.class); - operateViewModel = new ViewModelProvider(this).get(CaseOperateViewModel.class); - - caseViewModel.obtainCaseDetail(id); - - verifyImageAdapter = new EditableImageAdapter(this, 3, 13); - viewBinding.addImageRecyclerView.setAdapter(verifyImageAdapter); - } - - @Override - public void initEvent() { - caseViewModel.caseDetailModel.observe(this, new Observer() { - @Override - public void onChanged(CaseDetailBean resultBean) { - if (resultBean.getCode() == 200) { - data = resultBean.getData().get(0); - gridId = data.getGridId(); - String lng = data.getLng(); - if (!TextUtils.isEmpty(lng)) { - longitude = Double.parseDouble(lng); - } - String lat = data.getLat(); - if (!TextUtils.isEmpty(lat)) { - latitude = Double.parseDouble(lat); - } - viewBinding.caseNumberView.setText(data.getCaseid()); - viewBinding.caseTypeView.setText(data.getEorcName()); - viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); - viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); - viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); - viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); - viewBinding.caseHandleView.setText(data.getCaseStateName().equals("") ? "无处理意见" : data.getCaseStateName()); - viewBinding.caseStartTimeView.setText(data.getCreateTime()); - viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); - viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); - - //根据source判断是否能够修改案卷类型,11/12是公众号和热线电话,案卷类型可修改;否则不可修改 - int source = data.getSource(); - if (source != 11 && source != 12) { - viewBinding.caseTypeRightImage.setVisibility(View.GONE); - viewBinding.largeTypeRightImage.setVisibility(View.GONE); - viewBinding.smallTypeRightImage.setVisibility(View.GONE); - - viewBinding.caseClassLayout.setClickable(false); - viewBinding.caseLargeClassLayout.setClickable(false); - viewBinding.caseSmallClassLayout.setClickable(false); - } - - //图片 - String images = data.getFileIdVerify(); - if (!TextUtils.isEmpty(images)) { - ArrayList urls = new ArrayList<>(); - String[] split = images.split(","); - for (String s : split) { - if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { - urls.add(StringHelper.appendCompleteURL(s)); - } - } - ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); - imageAdapter.setImageList(urls); - viewBinding.imageGridView.setAdapter(imageAdapter); - //九宫格点击事件 - viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - if (urls.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); - } - } - }); - } - - //音频 - String audioFile = data.getAudioIdVerify(); - if (!TextUtils.isEmpty(audioFile)) { - viewBinding.audioPlayerView.setVisibility(View.VISIBLE); - viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); - } - - //视频 - String videoFile = data.getVideoIdVerify(); - if (!TextUtils.isEmpty(videoFile)) { - viewBinding.videoPlayerView.setVisibility(View.VISIBLE); - String videoUrl = StringHelper.appendCompleteURL(videoFile); - viewBinding.videoPlayerView.setUp(videoUrl, StringHub.filterSpaceOrEnter(data.getDescription()), Jzvd.SCREEN_NORMAL); - //设置第一帧为封面 - Glide.with(context) - .setDefaultRequestOptions(new RequestOptions().frame(4000000)) - .load(videoUrl) - .into(viewBinding.videoPlayerView.posterImageView); - } - } - } - }); - caseViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new QMUIBottomSheet.BottomListSheetBuilder(context) - .setTitle("案卷类型") - .addItem("事件") - .addItem("部件") - .setGravityCenter(true) - .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - viewBinding.caseTypeView.setText(tag); - //获取案卷大类 - commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); - } - }).build().show(); - } - }); - commonDataViewModel.largeTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseLargeTypeBean typeBean) { - if (typeBean.getCode() == 200) { - //设置大类数据 - largeTypeBeans = typeBean.getData(); - if (largeTypeBeans.size() == 0) { - viewBinding.caseLargeTypeView.setText("无小类"); - } else { - viewBinding.caseLargeTypeView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 - } - viewBinding.caseSmallTypeView.setText("请选择"); - } - } - }); - - viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (largeTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷大类"); - for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeCode = largeTypeBeans.get(position).getTypeCode(); - - viewBinding.caseLargeTypeView.setText(tag); - - //获取案卷小类 - CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); - eorc = dataBean.getEorc(); - String typeId = dataBean.getId(); - commonDataViewModel.obtainSmallType(eorc, typeId); - } - }).build().show(); - } - } - }); - commonDataViewModel.smallTypeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseSmallTypeBean typeBean) { - if (typeBean.getCode() == 200) { - smallTypeBeans = typeBean.getData(); - if (smallTypeBeans.size() == 0) { - viewBinding.caseSmallTypeView.setText("无小类"); - } else { - viewBinding.caseSmallTypeView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 - } - } - } - }); - - viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (smallTypeBeans.size() > 1) { - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("案卷小类"); - for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { - sheetBuilder.addItem(dataBean.getTypeDetailName()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); - - viewBinding.caseSmallTypeView.setText(tag); - } - }).build().show(); - } - } - }); - - viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - String type = viewBinding.caseTypeView.getText().toString(); - if (type.equals("请选择")) { - StringHub.show(context, "请先选择案卷类型"); - return; - } - int source = data.getSource(); - if (source == 11 || source == 12) { - Intent intent = new Intent(context, ArcGISMapActivity.class); - intent.putExtra("type", type); - verifyCaseLauncher.launch(intent); - } else { - MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); - } - } - }); - - viewBinding.caseConditionLayout.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - nodeViewModel.obtainNextNode(String.valueOf(data.getCaseState())); - } - }); - nodeViewModel.nodeModel.observe(this, new Observer() { - @Override - public void onChanged(CaseNextNodeBean resultBean) { - if (resultBean.isSuccess()) { - List dataBeans = resultBean.getData(); - QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); - sheetBuilder.setTitle("核实情况"); - for (CaseNextNodeBean.DataBean dataBean : dataBeans) { - sheetBuilder.addItem(dataBean.getNextOperation()); - } - sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { - @Override - public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { - dialog.dismiss(); - - CaseNextNodeBean.DataBean dataBean = dataBeans.get(position); - viewBinding.caseConditionView.setText(dataBean.getNextOperation()); - changeState = String.valueOf(dataBean.getNextState()); - } - }).build().show(); - } else { - StringHub.show(context, "该案卷无下级流转节点"); - } - } - }); - - //图片九宫格事件处理 - verifyImageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { - @Override - public void onAddImageClick() { - PictureSelectorHelper.selectPicture(context, new ISelectorListener() { - @Override - public void onSuccess(ArrayList result) { - if (result.size() == 1) { - uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); - } else { - for (LocalMedia localMedia : result) { - uploadViewModel.uploadImage(new File(localMedia.getRealPath())); - } - } - } - }); - } - - @Override - public void onItemClick(int position) { - if (realPaths.get(position).isEmpty()) { - StringHub.show(context, "图片加载失败,无法查看大图"); - } else { - ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); - } - } - - @Override - public void onItemLongClick(View view, int position) { - imageList.remove(position); - verifyImageAdapter.deleteImage(position); - } - }); - uploadViewModel.imageModel.observe(this, new Observer() { - @Override - public void onChanged(ActionResultBean resultBean) { - if (resultBean.isSuccess()) { - if (verifyImageAdapter.getItemCount() <= 3) { - String url = resultBean.getData(); - imageList.add(url); - realPaths.add(StringHelper.appendCompleteURL(url)); - verifyImageAdapter.setupImage(realPaths); - } else { - StringHub.show(context, "最多只能上传3张图片"); - } - } - } - }); - uploadViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - - viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - submitCase(); - } - }); - operateViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "案卷核实中,请稍后..."); - } else if (loadState == LoadState.Success) { - DialogHelper.dismissLoadingDialog(); - finish(); - } else { - StringHub.show(context, "核实失败,请重试"); - DialogHelper.dismissLoadingDialog(); - } - } - }); - } - - private void submitCase() { - String remarks = viewBinding.caseConditionView.getText().toString(); - if (TextUtils.isEmpty(remarks)) { - StringHub.show(this, "核实意见不能为空"); - return; - } - if (TextUtils.isEmpty(changeState)) { - StringHub.show(this, "核实情况还未选择"); - return; - } - int source = data.getSource(); - if (source != 11 && source != 12) { - //修改案卷 - operateViewModel.checkCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList)); - } else { - //补全案卷 - if (TextUtils.isEmpty(gridId)) { - StringHub.show(this, "网格ID异常,请重新选择"); - return; - } - String fieldIntro = viewBinding.casePlaceView.getText().toString(); - if (TextUtils.isEmpty(fieldIntro)) { - StringHub.show(this, "案卷地点还未填写"); - } - if (longitude == 0 || latitude == 0) { - StringHub.show(this, "经纬度异常,请重新选择位置"); - return; - } - operateViewModel.verifyCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), - changeState, remarks, StringHelper.reformatURL(imageList), - eorc == null ? data.getEorc() : eorc, - typeCode == null ? data.getCasetypeCode() : typeCode, - typeDetailCode == null ? data.getCasetypeDetailCode() : typeDetailCode, - String.valueOf(longitude), String.valueOf(latitude), - "1", gridId.substring(0, 6), - gridId.substring(0, 9), data.getCommunityCode(), gridId, fieldIntro); - } - } - - @Override - protected void onDestroy() { - viewBinding.audioPlayerView.release(); - super.onDestroy(); - } - - @Override - public void onBackPressed() { - if (Jzvd.backPress()) { - return; - } - super.onBackPressed(); - } - - @Override - protected void onPause() { - super.onPause(); - Jzvd.releaseAllVideos(); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java new file mode 100644 index 0000000..eec22e6 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifiedDetailActivity.java @@ -0,0 +1,168 @@ +package com.casic.dcms.view.verify; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityVerifiedDetailBinding; +import com.casic.dcms.model.CaseDetailBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.MapHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.vm.CaseViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.Constant; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; + +import cn.jzvd.Jzvd; + +public class VerifiedDetailActivity extends AndroidxBaseActivity { + + private final Context context = VerifiedDetailActivity.this; + private CaseViewModel caseViewModel; + private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷详情"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + @Override + protected void initData() { + String id = getIntent().getStringExtra(Constant.INTENT_PARAM); + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + caseViewModel.obtainCaseDetail(id); + caseViewModel.caseDetailModel.observe(this, new Observer() { + @Override + public void onChanged(CaseDetailBean resultBean) { + if (resultBean.getCode() == 200) { + data = resultBean.getData().get(0); + viewBinding.caseNumberView.setText(data.getCaseid()); + viewBinding.caseTypeView.setText(data.getEorcName()); + viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); + viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); + viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); + viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); + viewBinding.caseHandleView.setText(data.getProcessRemarks().equals("") ? "无" : data.getProcessRemarks()); + viewBinding.caseStartTimeView.setText(data.getCreateTime()); + viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); + viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); + + //图片 + String verifyImages = data.getFileIdVerify(); + if (!TextUtils.isEmpty(verifyImages)) { + ArrayList urls = new ArrayList<>(); + String[] split = verifyImages.split(","); + for (String s : split) { + if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { + urls.add(StringHelper.appendCompleteURL(s)); + } + } + ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); + imageAdapter.setImageList(urls); + viewBinding.imageGridView.setAdapter(imageAdapter); + //九宫格点击事件 + viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + if (urls.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); + } + } + }); + } + + //音频 + String audioFile = data.getAudioIdVerify(); + if (!TextUtils.isEmpty(audioFile)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); + } + + //视频 + String videoFile = data.getVideoIdVerify(); + if (!TextUtils.isEmpty(videoFile)) { + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + String videoUrl = StringHelper.appendCompleteURL(videoFile); + viewBinding.videoPlayerView.setUp( + videoUrl, + StringHub.filterSpaceOrEnter(data.getDescription()), + Jzvd.SCREEN_NORMAL + ); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(videoUrl) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + } + }); + } + + @Override + protected void initEvent() { + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); + } + }); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + public void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } + + @Override + protected void onDestroy() { + viewBinding.audioPlayerView.release(); + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java index d4b4b23..68dc3bc 100644 --- a/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifyCaseActivity.java @@ -2,7 +2,6 @@ import android.widget.LinearLayout; -import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import com.casic.dcms.R; @@ -14,6 +13,7 @@ import com.casic.dcms.utils.LocaleConstant; import com.gyf.immersionbar.ImmersionBar; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -23,8 +23,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText("案卷核实"); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); @@ -41,10 +41,10 @@ fragmentList.add(new CaseVerifyFragment()); fragmentList.add(new CaseVerifiedFragment()); SubViewPagerAdapter adapter = new SubViewPagerAdapter(getSupportFragmentManager(), LocaleConstant.CASE_PAGE_TITLES, fragmentList); - viewBinding.verifyViewPager.setAdapter(adapter); + viewBinding.viewPager.setAdapter(adapter); //绑定TabLayout - viewBinding.verifyTabLayout.setupWithViewPager(viewBinding.verifyViewPager); - LinearLayout linearLayout = (LinearLayout) viewBinding.verifyTabLayout.getChildAt(0); + viewBinding.topTabLayout.setupWithViewPager(viewBinding.viewPager); + LinearLayout linearLayout = (LinearLayout) viewBinding.topTabLayout.getChildAt(0); LinearLayoutHelper.setDivider(this, linearLayout); } diff --git a/app/src/main/java/com/casic/dcms/view/verify/VerifyDetailActivity.java b/app/src/main/java/com/casic/dcms/view/verify/VerifyDetailActivity.java new file mode 100644 index 0000000..207394d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/verify/VerifyDetailActivity.java @@ -0,0 +1,522 @@ +package com.casic.dcms.view.verify; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityVerifyDetailBinding; +import com.casic.dcms.model.ActionResultBean; +import com.casic.dcms.model.CaseDetailBean; +import com.casic.dcms.model.CaseLargeTypeBean; +import com.casic.dcms.model.CaseNextNodeBean; +import com.casic.dcms.model.CaseSmallTypeBean; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.MapHelper; +import com.casic.dcms.utils.PictureSelectorHelper; +import com.casic.dcms.utils.StringHelper; +import com.casic.dcms.utils.callback.ISelectorListener; +import com.casic.dcms.view.BigImageActivity; +import com.casic.dcms.view.map.ArcGISMapActivity; +import com.casic.dcms.vm.CaseOperateViewModel; +import com.casic.dcms.vm.CaseViewModel; +import com.casic.dcms.vm.CommonDataViewModel; +import com.casic.dcms.vm.NodeViewModel; +import com.casic.dcms.vm.UploadViewModel; +import com.gyf.immersionbar.ImmersionBar; +import com.luck.picture.lib.entity.LocalMedia; +import com.pengxh.androidx.lite.adapter.EditableImageAdapter; +import com.pengxh.androidx.lite.adapter.ReadOnlyImageAdapter; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.StringHub; +import com.pengxh.androidx.lite.utils.Constant; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.jzvd.Jzvd; + +public class VerifyDetailActivity extends AndroidxBaseActivity { + + private final Context context = VerifyDetailActivity.this; + private final ArrayList realPaths = new ArrayList<>();//真实图片路径 + private final List imageList = new ArrayList<>();//上传到服务器的数据集 + private CaseViewModel caseViewModel; + private CommonDataViewModel commonDataViewModel; + private UploadViewModel uploadViewModel; + private NodeViewModel nodeViewModel; + private CaseOperateViewModel operateViewModel; + private List largeTypeBeans; + private List smallTypeBeans; + private String id; + private String eorc; + private String typeCode; + private String typeDetailCode; + private String gridId;//可能来自案卷详情,也可能来自地图选点 + private double longitude, latitude; + private String changeState; + private CaseDetailBean.DataBean data = new CaseDetailBean.DataBean(); + private EditableImageAdapter verifyImageAdapter; + + private final ActivityResultLauncher verifyCaseLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + if (result.getResultCode() == Activity.RESULT_OK) { + Intent data = result.getData(); + if (data == null) { + return; + } + longitude = data.getDoubleExtra("longitude", 0); + latitude = data.getDoubleExtra("latitude", 0); + gridId = data.getStringExtra("gridId"); + String community = data.getStringExtra("community"); + String casePlace = data.getStringExtra("pos"); + viewBinding.caseCommunityView.setText(community); + if (TextUtils.isEmpty(casePlace)) { + viewBinding.casePlaceView.setText(community); + } else { + viewBinding.casePlaceView.setText(casePlace); + } + } + } + }); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + + viewBinding.titleBarLayout.titleView.setText("案卷核实"); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + public void initData() { + id = getIntent().getStringExtra(Constant.INTENT_PARAM); + + largeTypeBeans = new ArrayList<>(); + smallTypeBeans = new ArrayList<>(); + + caseViewModel = new ViewModelProvider(this).get(CaseViewModel.class); + commonDataViewModel = new ViewModelProvider(this).get(CommonDataViewModel.class); + uploadViewModel = new ViewModelProvider(this).get(UploadViewModel.class); + nodeViewModel = new ViewModelProvider(this).get(NodeViewModel.class); + operateViewModel = new ViewModelProvider(this).get(CaseOperateViewModel.class); + + caseViewModel.obtainCaseDetail(id); + + verifyImageAdapter = new EditableImageAdapter(this, 3, 13); + viewBinding.addImageRecyclerView.setAdapter(verifyImageAdapter); + } + + @Override + public void initEvent() { + caseViewModel.caseDetailModel.observe(this, new Observer() { + @Override + public void onChanged(CaseDetailBean resultBean) { + if (resultBean.getCode() == 200) { + data = resultBean.getData().get(0); + gridId = data.getGridId(); + String lng = data.getLng(); + if (!TextUtils.isEmpty(lng)) { + longitude = Double.parseDouble(lng); + } + String lat = data.getLat(); + if (!TextUtils.isEmpty(lat)) { + latitude = Double.parseDouble(lat); + } + viewBinding.caseNumberView.setText(data.getCaseid()); + viewBinding.caseTypeView.setText(data.getEorcName()); + viewBinding.caseLargeTypeView.setText(data.getCasetypeName()); + viewBinding.caseSmallTypeView.setText(data.getCasetypeDetailName()); + viewBinding.caseCommunityView.setText(data.getCommunityName().equals("") ? "无更详细社区信息" : data.getCommunityName()); + viewBinding.casePlaceView.setText(StringHub.filterSpaceOrEnter(data.getFieldintro())); + viewBinding.caseHandleView.setText(data.getCaseStateName().equals("") ? "无处理意见" : data.getCaseStateName()); + viewBinding.caseStartTimeView.setText(data.getCreateTime()); + viewBinding.caseEndTimeView.setText(data.getNodeLimittime()); + viewBinding.caseSituationView.setText(StringHub.filterSpaceOrEnter(data.getDescription())); + + //根据source判断是否能够修改案卷类型,11/12是公众号和热线电话,案卷类型可修改;否则不可修改 + int source = data.getSource(); + if (source != 11 && source != 12) { + viewBinding.caseTypeRightImage.setVisibility(View.GONE); + viewBinding.largeTypeRightImage.setVisibility(View.GONE); + viewBinding.smallTypeRightImage.setVisibility(View.GONE); + + viewBinding.caseClassLayout.setClickable(false); + viewBinding.caseLargeClassLayout.setClickable(false); + viewBinding.caseSmallClassLayout.setClickable(false); + } + + //图片 + String images = data.getFileIdVerify(); + if (!TextUtils.isEmpty(images)) { + ArrayList urls = new ArrayList<>(); + String[] split = images.split(","); + for (String s : split) { + if (s.endsWith(".jpg") || s.contains(".jpeg") || s.contains(".png")) { + urls.add(StringHelper.appendCompleteURL(s)); + } + } + ReadOnlyImageAdapter imageAdapter = new ReadOnlyImageAdapter(context); + imageAdapter.setImageList(urls); + viewBinding.imageGridView.setAdapter(imageAdapter); + //九宫格点击事件 + viewBinding.imageGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (urls.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, urls); + } + } + }); + } + + //音频 + String audioFile = data.getAudioIdVerify(); + if (!TextUtils.isEmpty(audioFile)) { + viewBinding.audioPlayerView.setVisibility(View.VISIBLE); + viewBinding.audioPlayerView.setAudioUrl(StringHelper.appendCompleteURL(audioFile)); + } + + //视频 + String videoFile = data.getVideoIdVerify(); + if (!TextUtils.isEmpty(videoFile)) { + viewBinding.videoPlayerView.setVisibility(View.VISIBLE); + String videoUrl = StringHelper.appendCompleteURL(videoFile); + viewBinding.videoPlayerView.setUp(videoUrl, StringHub.filterSpaceOrEnter(data.getDescription()), Jzvd.SCREEN_NORMAL); + //设置第一帧为封面 + Glide.with(context) + .setDefaultRequestOptions(new RequestOptions().frame(4000000)) + .load(videoUrl) + .into(viewBinding.videoPlayerView.posterImageView); + } + } + } + }); + caseViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.caseClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new QMUIBottomSheet.BottomListSheetBuilder(context) + .setTitle("案卷类型") + .addItem("事件") + .addItem("部件") + .setGravityCenter(true) + .setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + viewBinding.caseTypeView.setText(tag); + //获取案卷大类 + commonDataViewModel.obtainLargeType(String.valueOf(position + 1)); + } + }).build().show(); + } + }); + commonDataViewModel.largeTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseLargeTypeBean typeBean) { + if (typeBean.getCode() == 200) { + //设置大类数据 + largeTypeBeans = typeBean.getData(); + if (largeTypeBeans.size() == 0) { + viewBinding.caseLargeTypeView.setText("无小类"); + } else { + viewBinding.caseLargeTypeView.setText(largeTypeBeans.get(0).getTypeName());//默认选择第一个 + } + viewBinding.caseSmallTypeView.setText("请选择"); + } + } + }); + + viewBinding.caseLargeClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (largeTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷大类"); + for (CaseLargeTypeBean.DataBean dataBean : largeTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + typeCode = largeTypeBeans.get(position).getTypeCode(); + + viewBinding.caseLargeTypeView.setText(tag); + + //获取案卷小类 + CaseLargeTypeBean.DataBean dataBean = largeTypeBeans.get(position); + eorc = dataBean.getEorc(); + String typeId = dataBean.getId(); + commonDataViewModel.obtainSmallType(eorc, typeId); + } + }).build().show(); + } + } + }); + commonDataViewModel.smallTypeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseSmallTypeBean typeBean) { + if (typeBean.getCode() == 200) { + smallTypeBeans = typeBean.getData(); + if (smallTypeBeans.size() == 0) { + viewBinding.caseSmallTypeView.setText("无小类"); + } else { + viewBinding.caseSmallTypeView.setText(smallTypeBeans.get(0).getTypeDetailName());//默认选择第一个 + } + } + } + }); + + viewBinding.caseSmallClassLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (smallTypeBeans.size() > 1) { + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("案卷小类"); + for (CaseSmallTypeBean.DataBean dataBean : smallTypeBeans) { + sheetBuilder.addItem(dataBean.getTypeDetailName()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + typeDetailCode = smallTypeBeans.get(position).getTypeDetailCode(); + + viewBinding.caseSmallTypeView.setText(tag); + } + }).build().show(); + } + } + }); + + viewBinding.locationMapView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String type = viewBinding.caseTypeView.getText().toString(); + if (type.equals("请选择")) { + StringHub.show(context, "请先选择案卷类型"); + return; + } + int source = data.getSource(); + if (source == 11 || source == 12) { + Intent intent = new Intent(context, ArcGISMapActivity.class); + intent.putExtra("type", type); + verifyCaseLauncher.launch(intent); + } else { + MapHelper.displayOnMap(context, data.getEorcName(), data.getLng(), data.getLat()); + } + } + }); + + viewBinding.caseConditionLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + nodeViewModel.obtainNextNode(String.valueOf(data.getCaseState())); + } + }); + nodeViewModel.nodeModel.observe(this, new Observer() { + @Override + public void onChanged(CaseNextNodeBean resultBean) { + if (resultBean.isSuccess()) { + List dataBeans = resultBean.getData(); + QMUIBottomSheet.BottomListSheetBuilder sheetBuilder = new QMUIBottomSheet.BottomListSheetBuilder(context); + sheetBuilder.setTitle("核实情况"); + for (CaseNextNodeBean.DataBean dataBean : dataBeans) { + sheetBuilder.addItem(dataBean.getNextOperation()); + } + sheetBuilder.setGravityCenter(true).setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() { + @Override + public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) { + dialog.dismiss(); + + CaseNextNodeBean.DataBean dataBean = dataBeans.get(position); + viewBinding.caseConditionView.setText(dataBean.getNextOperation()); + changeState = String.valueOf(dataBean.getNextState()); + } + }).build().show(); + } else { + StringHub.show(context, "该案卷无下级流转节点"); + } + } + }); + + //图片九宫格事件处理 + verifyImageAdapter.setOnItemClickListener(new EditableImageAdapter.OnItemClickListener() { + @Override + public void onAddImageClick() { + PictureSelectorHelper.selectPicture(context, new ISelectorListener() { + @Override + public void onSuccess(ArrayList result) { + if (result.size() == 1) { + uploadViewModel.uploadImage(new File(result.get(0).getRealPath())); + } else { + for (LocalMedia localMedia : result) { + uploadViewModel.uploadImage(new File(localMedia.getRealPath())); + } + } + } + }); + } + + @Override + public void onItemClick(int position) { + if (realPaths.get(position).isEmpty()) { + StringHub.show(context, "图片加载失败,无法查看大图"); + } else { + ContextHub.navigatePageTo(context, BigImageActivity.class, position, realPaths); + } + } + + @Override + public void onItemLongClick(View view, int position) { + imageList.remove(position); + verifyImageAdapter.deleteImage(position); + } + }); + uploadViewModel.imageModel.observe(this, new Observer() { + @Override + public void onChanged(ActionResultBean resultBean) { + if (resultBean.isSuccess()) { + if (verifyImageAdapter.getItemCount() <= 3) { + String url = resultBean.getData(); + imageList.add(url); + realPaths.add(StringHelper.appendCompleteURL(url)); + verifyImageAdapter.setupImage(realPaths); + } else { + StringHub.show(context, "最多只能上传3张图片"); + } + } + } + }); + uploadViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "上传中,请稍后..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + + viewBinding.submitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submitCase(); + } + }); + operateViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "案卷核实中,请稍后..."); + } else if (loadState == LoadState.Success) { + DialogHelper.dismissLoadingDialog(); + finish(); + } else { + StringHub.show(context, "核实失败,请重试"); + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + + private void submitCase() { + String remarks = viewBinding.caseConditionView.getText().toString(); + if (TextUtils.isEmpty(remarks)) { + StringHub.show(this, "核实意见不能为空"); + return; + } + if (TextUtils.isEmpty(changeState)) { + StringHub.show(this, "核实情况还未选择"); + return; + } + int source = data.getSource(); + if (source != 11 && source != 12) { + //修改案卷 + operateViewModel.checkCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), + changeState, remarks, StringHelper.reformatURL(imageList)); + } else { + //补全案卷 + if (TextUtils.isEmpty(gridId)) { + StringHub.show(this, "网格ID异常,请重新选择"); + return; + } + String fieldIntro = viewBinding.casePlaceView.getText().toString(); + if (TextUtils.isEmpty(fieldIntro)) { + StringHub.show(this, "案卷地点还未填写"); + } + if (longitude == 0 || latitude == 0) { + StringHub.show(this, "经纬度异常,请重新选择位置"); + return; + } + operateViewModel.verifyCase(data.getProcessId(), id, String.valueOf(data.getCaseState()), + changeState, remarks, StringHelper.reformatURL(imageList), + eorc == null ? data.getEorc() : eorc, + typeCode == null ? data.getCasetypeCode() : typeCode, + typeDetailCode == null ? data.getCasetypeDetailCode() : typeDetailCode, + String.valueOf(longitude), String.valueOf(latitude), + "1", gridId.substring(0, 6), + gridId.substring(0, 9), data.getCommunityCode(), gridId, fieldIntro); + } + } + + @Override + protected void onDestroy() { + viewBinding.audioPlayerView.release(); + super.onDestroy(); + } + + @Override + public void onBackPressed() { + if (Jzvd.backPress()) { + return; + } + super.onBackPressed(); + } + + @Override + protected void onPause() { + super.onPause(); + Jzvd.releaseAllVideos(); + } +} diff --git a/app/src/main/java/com/casic/dcms/vm/CaseViewModel.java b/app/src/main/java/com/casic/dcms/vm/CaseViewModel.java index 92ec1d7..5f58648 100644 --- a/app/src/main/java/com/casic/dcms/vm/CaseViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/CaseViewModel.java @@ -9,9 +9,9 @@ import com.casic.dcms.model.OvertimeCaseBean; import com.casic.dcms.model.PackageCaseBean; import com.casic.dcms.model.UrgentCaseBean; +import com.casic.dcms.model.VerifiedCaseModel; +import com.casic.dcms.model.VerifyCaseModel; import com.casic.dcms.model.check.CaseCheckModel; -import com.casic.dcms.model.verify.VerifiedCaseModel; -import com.casic.dcms.model.verify.VerifyCaseModel; import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; diff --git a/app/src/main/res/drawable/ic_left_black.xml b/app/src/main/res/drawable/ic_left_black.xml new file mode 100644 index 0000000..a9f9898 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_black.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_brief_case.xml b/app/src/main/res/layout/activity_brief_case.xml new file mode 100644 index 0000000..535f547 --- /dev/null +++ b/app/src/main/res/layout/activity_brief_case.xml @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +