diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java index 0a87bdb..d145530 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java @@ -37,7 +37,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("趋势分析"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java index 0a87bdb..d145530 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java @@ -37,7 +37,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("趋势分析"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); diff --git a/app/src/main/res/layout/activity_brief_case.xml b/app/src/main/res/layout/activity_brief_case.xml index 535f547..17ee15b 100644 --- a/app/src/main/res/layout/activity_brief_case.xml +++ b/app/src/main/res/layout/activity_brief_case.xml @@ -201,8 +201,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java index 0a87bdb..d145530 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java @@ -37,7 +37,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("趋势分析"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); diff --git a/app/src/main/res/layout/activity_brief_case.xml b/app/src/main/res/layout/activity_brief_case.xml index 535f547..17ee15b 100644 --- a/app/src/main/res/layout/activity_brief_case.xml +++ b/app/src/main/res/layout/activity_brief_case.xml @@ -201,8 +201,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_business_case.xml b/app/src/main/res/layout/activity_business_case.xml index e1ff0d1..db4e023 100644 --- a/app/src/main/res/layout/activity_business_case.xml +++ b/app/src/main/res/layout/activity_business_case.xml @@ -196,8 +196,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java index 0a87bdb..d145530 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java @@ -37,7 +37,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("趋势分析"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); diff --git a/app/src/main/res/layout/activity_brief_case.xml b/app/src/main/res/layout/activity_brief_case.xml index 535f547..17ee15b 100644 --- a/app/src/main/res/layout/activity_brief_case.xml +++ b/app/src/main/res/layout/activity_brief_case.xml @@ -201,8 +201,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_business_case.xml b/app/src/main/res/layout/activity_business_case.xml index e1ff0d1..db4e023 100644 --- a/app/src/main/res/layout/activity_business_case.xml +++ b/app/src/main/res/layout/activity_business_case.xml @@ -196,8 +196,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml new file mode 100644 index 0000000..015123a --- /dev/null +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java index 0a87bdb..d145530 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java @@ -37,7 +37,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("趋势分析"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); diff --git a/app/src/main/res/layout/activity_brief_case.xml b/app/src/main/res/layout/activity_brief_case.xml index 535f547..17ee15b 100644 --- a/app/src/main/res/layout/activity_brief_case.xml +++ b/app/src/main/res/layout/activity_brief_case.xml @@ -201,8 +201,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_business_case.xml b/app/src/main/res/layout/activity_business_case.xml index e1ff0d1..db4e023 100644 --- a/app/src/main/res/layout/activity_business_case.xml +++ b/app/src/main/res/layout/activity_business_case.xml @@ -196,8 +196,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml new file mode 100644 index 0000000..015123a --- /dev/null +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_status.xml b/app/src/main/res/layout/activity_case_status.xml deleted file mode 100644 index 015123a..0000000 --- a/app/src/main/res/layout/activity_case_status.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java index 0a87bdb..d145530 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java @@ -37,7 +37,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("趋势分析"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); diff --git a/app/src/main/res/layout/activity_brief_case.xml b/app/src/main/res/layout/activity_brief_case.xml index 535f547..17ee15b 100644 --- a/app/src/main/res/layout/activity_brief_case.xml +++ b/app/src/main/res/layout/activity_brief_case.xml @@ -201,8 +201,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_business_case.xml b/app/src/main/res/layout/activity_business_case.xml index e1ff0d1..db4e023 100644 --- a/app/src/main/res/layout/activity_business_case.xml +++ b/app/src/main/res/layout/activity_business_case.xml @@ -196,8 +196,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml new file mode 100644 index 0000000..015123a --- /dev/null +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_status.xml b/app/src/main/res/layout/activity_case_status.xml deleted file mode 100644 index 015123a..0000000 --- a/app/src/main/res/layout/activity_case_status.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml new file mode 100644 index 0000000..91cb65a --- /dev/null +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java index 0a87bdb..d145530 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java @@ -37,7 +37,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("趋势分析"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); diff --git a/app/src/main/res/layout/activity_brief_case.xml b/app/src/main/res/layout/activity_brief_case.xml index 535f547..17ee15b 100644 --- a/app/src/main/res/layout/activity_brief_case.xml +++ b/app/src/main/res/layout/activity_brief_case.xml @@ -201,8 +201,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_business_case.xml b/app/src/main/res/layout/activity_business_case.xml index e1ff0d1..db4e023 100644 --- a/app/src/main/res/layout/activity_business_case.xml +++ b/app/src/main/res/layout/activity_business_case.xml @@ -196,8 +196,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml new file mode 100644 index 0000000..015123a --- /dev/null +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_status.xml b/app/src/main/res/layout/activity_case_status.xml deleted file mode 100644 index 015123a..0000000 --- a/app/src/main/res/layout/activity_case_status.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml new file mode 100644 index 0000000..91cb65a --- /dev/null +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_common_case.xml b/app/src/main/res/layout/activity_common_case.xml index 450b94c..192ee38 100644 --- a/app/src/main/res/layout/activity_common_case.xml +++ b/app/src/main/res/layout/activity_common_case.xml @@ -230,8 +230,8 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java index 0a87bdb..d145530 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java @@ -37,7 +37,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("趋势分析"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); diff --git a/app/src/main/res/layout/activity_brief_case.xml b/app/src/main/res/layout/activity_brief_case.xml index 535f547..17ee15b 100644 --- a/app/src/main/res/layout/activity_brief_case.xml +++ b/app/src/main/res/layout/activity_brief_case.xml @@ -201,8 +201,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_business_case.xml b/app/src/main/res/layout/activity_business_case.xml index e1ff0d1..db4e023 100644 --- a/app/src/main/res/layout/activity_business_case.xml +++ b/app/src/main/res/layout/activity_business_case.xml @@ -196,8 +196,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml new file mode 100644 index 0000000..015123a --- /dev/null +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_status.xml b/app/src/main/res/layout/activity_case_status.xml deleted file mode 100644 index 015123a..0000000 --- a/app/src/main/res/layout/activity_case_status.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml new file mode 100644 index 0000000..91cb65a --- /dev/null +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_common_case.xml b/app/src/main/res/layout/activity_common_case.xml index 450b94c..192ee38 100644 --- a/app/src/main/res/layout/activity_common_case.xml +++ b/app/src/main/res/layout/activity_common_case.xml @@ -230,8 +230,8 @@ diff --git a/app/src/main/res/layout/activity_dept_handle_condition.xml b/app/src/main/res/layout/activity_dept_handle_condition.xml new file mode 100644 index 0000000..0bd5447 --- /dev/null +++ b/app/src/main/res/layout/activity_dept_handle_condition.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java index 0a87bdb..d145530 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java @@ -37,7 +37,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("趋势分析"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); diff --git a/app/src/main/res/layout/activity_brief_case.xml b/app/src/main/res/layout/activity_brief_case.xml index 535f547..17ee15b 100644 --- a/app/src/main/res/layout/activity_brief_case.xml +++ b/app/src/main/res/layout/activity_brief_case.xml @@ -201,8 +201,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_business_case.xml b/app/src/main/res/layout/activity_business_case.xml index e1ff0d1..db4e023 100644 --- a/app/src/main/res/layout/activity_business_case.xml +++ b/app/src/main/res/layout/activity_business_case.xml @@ -196,8 +196,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml new file mode 100644 index 0000000..015123a --- /dev/null +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_status.xml b/app/src/main/res/layout/activity_case_status.xml deleted file mode 100644 index 015123a..0000000 --- a/app/src/main/res/layout/activity_case_status.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml new file mode 100644 index 0000000..91cb65a --- /dev/null +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_common_case.xml b/app/src/main/res/layout/activity_common_case.xml index 450b94c..192ee38 100644 --- a/app/src/main/res/layout/activity_common_case.xml +++ b/app/src/main/res/layout/activity_common_case.xml @@ -230,8 +230,8 @@ diff --git a/app/src/main/res/layout/activity_dept_handle_condition.xml b/app/src/main/res/layout/activity_dept_handle_condition.xml new file mode 100644 index 0000000..0bd5447 --- /dev/null +++ b/app/src/main/res/layout/activity_dept_handle_condition.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_event_resource.xml b/app/src/main/res/layout/activity_event_resource.xml deleted file mode 100644 index 91cb65a..0000000 --- a/app/src/main/res/layout/activity_event_resource.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java index 0a87bdb..d145530 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java @@ -37,7 +37,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("趋势分析"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); diff --git a/app/src/main/res/layout/activity_brief_case.xml b/app/src/main/res/layout/activity_brief_case.xml index 535f547..17ee15b 100644 --- a/app/src/main/res/layout/activity_brief_case.xml +++ b/app/src/main/res/layout/activity_brief_case.xml @@ -201,8 +201,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_business_case.xml b/app/src/main/res/layout/activity_business_case.xml index e1ff0d1..db4e023 100644 --- a/app/src/main/res/layout/activity_business_case.xml +++ b/app/src/main/res/layout/activity_business_case.xml @@ -196,8 +196,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml new file mode 100644 index 0000000..015123a --- /dev/null +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_status.xml b/app/src/main/res/layout/activity_case_status.xml deleted file mode 100644 index 015123a..0000000 --- a/app/src/main/res/layout/activity_case_status.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml new file mode 100644 index 0000000..91cb65a --- /dev/null +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_common_case.xml b/app/src/main/res/layout/activity_common_case.xml index 450b94c..192ee38 100644 --- a/app/src/main/res/layout/activity_common_case.xml +++ b/app/src/main/res/layout/activity_common_case.xml @@ -230,8 +230,8 @@ diff --git a/app/src/main/res/layout/activity_dept_handle_condition.xml b/app/src/main/res/layout/activity_dept_handle_condition.xml new file mode 100644 index 0000000..0bd5447 --- /dev/null +++ b/app/src/main/res/layout/activity_dept_handle_condition.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_event_resource.xml b/app/src/main/res/layout/activity_event_resource.xml deleted file mode 100644 index 91cb65a..0000000 --- a/app/src/main/res/layout/activity_event_resource.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_grid_analysis.xml b/app/src/main/res/layout/activity_grid_analysis.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_grid_analysis.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java index 0a87bdb..d145530 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java @@ -37,7 +37,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("趋势分析"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); diff --git a/app/src/main/res/layout/activity_brief_case.xml b/app/src/main/res/layout/activity_brief_case.xml index 535f547..17ee15b 100644 --- a/app/src/main/res/layout/activity_brief_case.xml +++ b/app/src/main/res/layout/activity_brief_case.xml @@ -201,8 +201,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_business_case.xml b/app/src/main/res/layout/activity_business_case.xml index e1ff0d1..db4e023 100644 --- a/app/src/main/res/layout/activity_business_case.xml +++ b/app/src/main/res/layout/activity_business_case.xml @@ -196,8 +196,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml new file mode 100644 index 0000000..015123a --- /dev/null +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_status.xml b/app/src/main/res/layout/activity_case_status.xml deleted file mode 100644 index 015123a..0000000 --- a/app/src/main/res/layout/activity_case_status.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml new file mode 100644 index 0000000..91cb65a --- /dev/null +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_common_case.xml b/app/src/main/res/layout/activity_common_case.xml index 450b94c..192ee38 100644 --- a/app/src/main/res/layout/activity_common_case.xml +++ b/app/src/main/res/layout/activity_common_case.xml @@ -230,8 +230,8 @@ diff --git a/app/src/main/res/layout/activity_dept_handle_condition.xml b/app/src/main/res/layout/activity_dept_handle_condition.xml new file mode 100644 index 0000000..0bd5447 --- /dev/null +++ b/app/src/main/res/layout/activity_dept_handle_condition.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_event_resource.xml b/app/src/main/res/layout/activity_event_resource.xml deleted file mode 100644 index 91cb65a..0000000 --- a/app/src/main/res/layout/activity_event_resource.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_grid_analysis.xml b/app/src/main/res/layout/activity_grid_analysis.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_grid_analysis.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_punish_analysis.xml b/app/src/main/res/layout/activity_punish_analysis.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_punish_analysis.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ebd14f7..d8f1d5f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -223,6 +223,7 @@ + @@ -237,6 +238,7 @@ + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ef2ece3..910a6ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -71,9 +71,11 @@ - - - + + + + + diff --git a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java index 18d7ed4..f018b90 100644 --- a/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java +++ b/app/src/main/java/com/casic/dcms/utils/LocaleConstant.java @@ -28,7 +28,7 @@ R.mipmap.cffx); public static final List ANALYSIS_ITEMS = Arrays.asList( - "城管基础数据", "案卷来源统计", "高发案卷统计", + "城市基础数据", "案卷来源统计", "高发案卷统计", "单位处置情况", "网格分析", "案卷趋势分析", "商铺处罚分析"); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java new file mode 100644 index 0000000..f29adb0 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -0,0 +1,97 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCaseResourceBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/16 16:55 + * @email 290677893@qq.com + */ +public class CaseResourceActivity extends AndroidxBaseActivity { + + private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); + private final Context context = CaseResourceActivity.this; + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.statusPieChart); + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); + pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); + ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); + //初始化横向柱状图 + ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java deleted file mode 100644 index 03638c1..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseStatusActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityCaseStatusBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 案卷状态 - * @package com.casic.dcms.ui - * @date 2022/2/16 16:55 - * @email 290677893@qq.com - */ -public class CaseStatusActivity extends AndroidxBaseActivity { - - private static final List horizontalLabelName = Arrays.asList("待立案", "待核实", "待处理", "待核查", "待调整", "不予立案", "销案", "其他状态", "待结案", "结案"); - private final Context context = CaseStatusActivity.this; - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - viewBinding.titleBarLayout.titleView.setText("案卷状态"); - viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.statusPieChart); - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(10), "未结案")); - pieEntries.add(new PieEntry(new Random().nextInt(200), "已结案")); - ChartViewHelper.setPieChartData(viewBinding.statusPieChart, pieEntries); - //初始化横向柱状图 - ChartViewHelper.initBarChart(viewBinding.statusBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.statusBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java new file mode 100644 index 0000000..14bcf7d --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -0,0 +1,160 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; + +import androidx.core.content.ContextCompat; +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.bin.david.form.core.TableConfig; +import com.bin.david.form.data.style.FontStyle; +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityCityBaseDataBinding; +import com.casic.dcms.model.EventSourceBean; +import com.casic.dcms.model.ExcelDataBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.DialogHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.casic.dcms.vm.DataAnalysisViewModel; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.hub.ContextHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author : Pengxh + * @time : 2021/4/16 9:24 + * @email : 290677893@qq.com + */ +public class CityBaseDataActivity extends AndroidxBaseActivity { + + private static final String TAG = "CityBaseDataActivity"; + private final Context context = CityBaseDataActivity.this; + private final List excelDataBeans = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private String[] date = new String[0]; + private DataAnalysisViewModel analysisViewModel; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //默认显示当前月的数据 + long timeMillis = System.currentTimeMillis(); + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); + try { + date = TimeOrDateUtil.timestampToMonth(timeMillis); + } catch (ParseException e) { + e.printStackTrace(); + } + //初始化表格 + initTableConfig(); + //初始化饼图 + ChartViewHelper.initPieChart(viewBinding.resourcePieChart); + analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + analysisViewModel.obtainEventSource(date[0], date[1]); + } + + private void initTableConfig() { + TableConfig config = viewBinding.resourceTableView.getConfig(); + //首行属性 + config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); + config.setContentBackgroundColor(Color.LTGRAY); + config.setColumnTitleVerticalPadding(30); + //内容属性 + config.setContentStyle(new FontStyle(50, Color.DKGRAY)); + config.setVerticalPadding(30); + config.setShowTableTitle(false); //不显示标题 + config.setShowXSequence(false); //不显示横向ABC....序列 + config.setShowYSequence(false); //不显示纵向123....序列 + config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); + String[] date = new String[0]; + try { + date = TimeOrDateUtil.timestampToMonth(millSeconds); + } catch (ParseException e) { + e.printStackTrace(); + } + analysisViewModel.obtainEventSource(date[0], date[1]); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + + analysisViewModel.eventSourceModel.observe(this, new Observer() { + @Override + public void onChanged(EventSourceBean resultBean) { + if (resultBean.getCode() == 200) { + List dataBeanList = resultBean.getData(); + for (int i = 0; i < dataBeanList.size(); i++) { + EventSourceBean.DataDTO dataBean = dataBeanList.get(i); + + String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); + int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); + excelDataBeans.add(new ExcelDataBean(i, label, number)); + + String caseNum = dataBean.getCaseNum(); + //表格数据需要把0的加进去,饼图不需要 + if (!caseNum.equals("0")) { + pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); + } + } + viewBinding.resourceTableView.setData(excelDataBeans); + ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); + } + } + }); + analysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "获取数据中..."); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java index 7cc5694..7156356 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DataAnalysisActivity.java @@ -12,7 +12,6 @@ import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.hub.IntHub; -import com.pengxh.androidx.lite.hub.StringHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import java.util.ArrayList; @@ -64,11 +63,11 @@ Intent intent = new Intent(); switch (position) { case 0: - intent.setClass(context, EventSourceActivity.class); + intent.setClass(context, CityBaseDataActivity.class); startActivity(intent); break; case 1: - intent.setClass(context, CaseStatusActivity.class); + intent.setClass(context, CaseResourceActivity.class); startActivity(intent); break; case 2: @@ -76,16 +75,21 @@ startActivity(intent); break; case 3: - intent.setClass(context, StreetStatisticsActivity.class); + intent.setClass(context, DeptHandleConditionActivity.class); startActivity(intent); break; case 4: - StringHub.show(context, "处理统计"); + intent.setClass(context, GridAnalysisActivity.class); + startActivity(intent); break; case 5: intent.setClass(context, TrendAnalysisActivity.class); startActivity(intent); break; + case 6: + intent.setClass(context, PunishAnalysisActivity.class); + startActivity(intent); + break; } } }); diff --git a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java new file mode 100644 index 0000000..e2466ce --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -0,0 +1,153 @@ +package com.casic.dcms.view.statistics; + +import android.content.Context; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import androidx.core.content.ContextCompat; + +import com.casic.dcms.R; +import com.casic.dcms.databinding.ActivityDeptHandleConditionBinding; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.LocaleConstant; +import com.casic.dcms.utils.TimeOrDateUtil; +import com.github.mikephil.charting.data.BarEntry; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.PieEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.jzxiang.pickerview.TimePickerDialog; +import com.jzxiang.pickerview.data.Type; +import com.jzxiang.pickerview.listener.OnDateSetListener; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; +import java.util.Random; + +/** + * @author a203 + * @package com.casic.dcms.ui + * @date 2022/2/15 09:46 + * @email 290677893@qq.com + */ +public class DeptHandleConditionActivity extends AndroidxBaseActivity { + + private static final String TAG = "DeptHandleConditionActivity"; + private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); + private final Context context = DeptHandleConditionActivity.this; + private final List spinnerEntries = new ArrayList<>(); + private final List commonEntries = new ArrayList<>(); + private final List quickEntries = new ArrayList<>(); + private final List packageEntries = new ArrayList<>(); + private final List pieEntries = new ArrayList<>(); + private final List barEntries = new ArrayList<>(); + private String selectedStreet = ""; + + @Override + protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); + ImmersionBar.with(this).statusBarDarkFont(false).init(); + + //TODO 这是模拟数据 + StringBuilder str = new StringBuilder(); + for (int i = 0; i < 5; i++) { + for (int j = 0; j < i; j++) { + str.append("x"); + } + spinnerEntries.add(str.append("街道").toString()); + str.delete(0, str.length()); + } + ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); + arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); + viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); + viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); + //默认选中第一条 + selectedStreet = spinnerEntries.get(0); + viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + //spinner 选中后显示字体的颜色设置 + TextView tv = (TextView) view; + tv.setTextColor(ContextCompat.getColor(context, R.color.white)); + selectedStreet = spinnerEntries.get(i); + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + //默认显示当前月的分析数据 + viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initData() { + //初始化折线图 + ChartViewHelper.initLineChart(viewBinding.streetLineChart); + //TODO 这是模拟数据 + Calendar calendar = Calendar.getInstance(); + int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + for (int i = 0; i < maxDay; i++) { + commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); + } + for (int i = 0; i < maxDay; i++) { + quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); + } + for (int i = 0; i < maxDay; i++) { + packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); + } + ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); + //初始化饼图 +// ChartUtil.initPieChart(this, viewBinding.streetPieChart); + //设置数据 + //TODO 这是模拟数据 + pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); + pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); + pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); + ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); + //初始化横向柱状图 +// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); + //设置数据 + //TODO 这是模拟数据 + for (int i = 0; i < horizontalLabelName.size(); i++) { + barEntries.add(new BarEntry(i, new Random().nextInt(100))); + } + ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); + } + + @Override + protected void initEvent() { + viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + new TimePickerDialog.Builder() + .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) + .setTitleStringId("选择日期") + .setWheelItemTextSize(16) + .setCyclic(false) + .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) + .setMaxMillseconds(System.currentTimeMillis()) + .setType(Type.YEAR_MONTH) + .setCallBack(new OnDateSetListener() { + @Override + public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { + String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); + viewBinding.titleBarLayout.dateView.setText(date); + } + }).build().show(getSupportFragmentManager(), "year_month"); + } + }); + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java deleted file mode 100644 index 69c61f4..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/EventSourceActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.graphics.Color; -import android.view.View; - -import androidx.core.content.ContextCompat; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProvider; - -import com.bin.david.form.core.TableConfig; -import com.bin.david.form.data.style.FontStyle; -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityEventResourceBinding; -import com.casic.dcms.model.EventSourceBean; -import com.casic.dcms.model.ExcelDataBean; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.DialogHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.casic.dcms.vm.DataAnalysisViewModel; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.hub.ContextHub; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; -import com.pengxh.androidx.lite.vm.LoadState; - -import java.text.ParseException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author : Pengxh - * @time : 2021/4/16 9:24 - * @email : 290677893@qq.com - */ -public class EventSourceActivity extends AndroidxBaseActivity { - - private static final String TAG = "EventSourceActivity"; - private final Context context = EventSourceActivity.this; - private final List excelDataBeans = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private String[] date = new String[0]; - private DataAnalysisViewModel analysisViewModel; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, 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() { - //默认显示当前月的数据 - long timeMillis = System.currentTimeMillis(); - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(timeMillis)); - try { - date = TimeOrDateUtil.timestampToMonth(timeMillis); - } catch (ParseException e) { - e.printStackTrace(); - } - //初始化表格 - initTableConfig(); - //初始化饼图 - ChartViewHelper.initPieChart(viewBinding.resourcePieChart); - analysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); - analysisViewModel.obtainEventSource(date[0], date[1]); - } - - private void initTableConfig() { - TableConfig config = viewBinding.resourceTableView.getConfig(); - //首行属性 - config.setColumnTitleStyle(new FontStyle(50, Color.DKGRAY)); - config.setContentBackgroundColor(Color.LTGRAY); - config.setColumnTitleVerticalPadding(30); - //内容属性 - config.setContentStyle(new FontStyle(50, Color.DKGRAY)); - config.setVerticalPadding(30); - config.setShowTableTitle(false); //不显示标题 - config.setShowXSequence(false); //不显示横向ABC....序列 - config.setShowYSequence(false); //不显示纵向123....序列 - config.setMinTableWidth(ContextHub.getScreenWidth(this));//不设置的话会就不会居中显示 - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(millSeconds)); - String[] date = new String[0]; - try { - date = TimeOrDateUtil.timestampToMonth(millSeconds); - } catch (ParseException e) { - e.printStackTrace(); - } - analysisViewModel.obtainEventSource(date[0], date[1]); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - - analysisViewModel.eventSourceModel.observe(this, new Observer() { - @Override - public void onChanged(EventSourceBean resultBean) { - if (resultBean.getCode() == 200) { - List dataBeanList = resultBean.getData(); - for (int i = 0; i < dataBeanList.size(); i++) { - EventSourceBean.DataDTO dataBean = dataBeanList.get(i); - - String label = dataBean.getCaseSource().equals("--") ? "未知来源" : dataBean.getCaseSource(); - int number = Integer.parseInt(dataBean.getEventNum()) + Integer.parseInt(dataBean.getComponentNum()); - excelDataBeans.add(new ExcelDataBean(i, label, number)); - - String caseNum = dataBean.getCaseNum(); - //表格数据需要把0的加进去,饼图不需要 - if (!caseNum.equals("0")) { - pieEntries.add(new PieEntry(Float.parseFloat(caseNum), label)); - } - } - viewBinding.resourceTableView.setData(excelDataBeans); - ChartViewHelper.setPieChartData(viewBinding.resourcePieChart, pieEntries); - } - } - }); - analysisViewModel.loadState.observe(this, new Observer() { - @Override - public void onChanged(LoadState loadState) { - if (loadState == LoadState.Loading) { - DialogHelper.showLoadingDialog(context, "获取数据中..."); - } else { - DialogHelper.dismissLoadingDialog(); - } - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java new file mode 100644 index 0000000..f4a6aed --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityGridAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class GridAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java index 4687759..69a4d72 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/HighEventActivity.java @@ -50,7 +50,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("高发问题"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } diff --git a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java new file mode 100644 index 0000000..e6300b7 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -0,0 +1,27 @@ +package com.casic.dcms.view.statistics; + +import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.pengxh.androidx.lite.base.AndroidxBaseActivity; + +public class PunishAnalysisActivity extends AndroidxBaseActivity { + + @Override + protected void setupTopBarLayout() { + + } + + @Override + protected void initData() { + + } + + @Override + protected void observeRequestState() { + + } + + @Override + protected void initEvent() { + + } +} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java deleted file mode 100644 index b2bca4c..0000000 --- a/app/src/main/java/com/casic/dcms/view/statistics/StreetStatisticsActivity.java +++ /dev/null @@ -1,154 +0,0 @@ -package com.casic.dcms.view.statistics; - -import android.content.Context; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.TextView; - -import androidx.core.content.ContextCompat; - -import com.casic.dcms.R; -import com.casic.dcms.databinding.ActivityStreetStatisticsBinding; -import com.casic.dcms.utils.ChartViewHelper; -import com.casic.dcms.utils.LocaleConstant; -import com.casic.dcms.utils.TimeOrDateUtil; -import com.github.mikephil.charting.data.BarEntry; -import com.github.mikephil.charting.data.Entry; -import com.github.mikephil.charting.data.PieEntry; -import com.gyf.immersionbar.ImmersionBar; -import com.jzxiang.pickerview.TimePickerDialog; -import com.jzxiang.pickerview.data.Type; -import com.jzxiang.pickerview.listener.OnDateSetListener; -import com.pengxh.androidx.lite.base.AndroidxBaseActivity; -import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.List; -import java.util.Random; - -/** - * @author a203 - * @description 街道统计 - * @package com.casic.dcms.ui - * @date 2022/2/15 09:46 - * @email 290677893@qq.com - */ -public class StreetStatisticsActivity extends AndroidxBaseActivity { - - private static final String TAG = "StreetActivity"; - private static final List horizontalLabelName = Arrays.asList("销案", "不予立案", "结案", "待结案", "待核查", "待处理", "待核实"); - private final Context context = StreetStatisticsActivity.this; - private final List spinnerEntries = new ArrayList<>(); - private final List commonEntries = new ArrayList<>(); - private final List quickEntries = new ArrayList<>(); - private final List packageEntries = new ArrayList<>(); - private final List pieEntries = new ArrayList<>(); - private final List barEntries = new ArrayList<>(); - private String selectedStreet = ""; - - @Override - protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); - - //TODO 这是模拟数据 - StringBuilder str = new StringBuilder(); - for (int i = 0; i < 5; i++) { - for (int j = 0; j < i; j++) { - str.append("x"); - } - spinnerEntries.add(str.append("街道").toString()); - str.delete(0, str.length()); - } - ArrayAdapter arrayAdapter = new ArrayAdapter<>(context, android.R.layout.simple_spinner_item, spinnerEntries); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); - int dimension = (int) getResources().getDimension(R.dimen.titleViewHeight); - viewBinding.titleBarLayout.titleSpinner.setDropDownVerticalOffset(dimension); - viewBinding.titleBarLayout.titleSpinner.setAdapter(arrayAdapter); - //默认选中第一条 - selectedStreet = spinnerEntries.get(0); - viewBinding.titleBarLayout.titleSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - //spinner 选中后显示字体的颜色设置 - TextView tv = (TextView) view; - tv.setTextColor(ContextCompat.getColor(context, R.color.white)); - selectedStreet = spinnerEntries.get(i); - } - - @Override - public void onNothingSelected(AdapterView adapterView) { - - } - }); - //默认显示当前月的分析数据 - viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); - } - - @Override - protected void observeRequestState() { - - } - - @Override - protected void initData() { - //初始化折线图 - ChartViewHelper.initLineChart(viewBinding.streetLineChart); - //TODO 这是模拟数据 - Calendar calendar = Calendar.getInstance(); - int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - for (int i = 0; i < maxDay; i++) { - commonEntries.add(new Entry(i, new Random().nextInt(15), "common")); - } - for (int i = 0; i < maxDay; i++) { - quickEntries.add(new Entry(i, new Random().nextInt(20), "quick")); - } - for (int i = 0; i < maxDay; i++) { - packageEntries.add(new Entry(i, new Random().nextInt(10), "package")); - } - ChartViewHelper.setLineChartData(viewBinding.streetLineChart, commonEntries, quickEntries, packageEntries); - //初始化饼图 -// ChartUtil.initPieChart(this, viewBinding.streetPieChart); - //设置数据 - //TODO 这是模拟数据 - pieEntries.add(new PieEntry(new Random().nextInt(100), "普通")); - pieEntries.add(new PieEntry(new Random().nextInt(150), "快速")); - pieEntries.add(new PieEntry(new Random().nextInt(50), "三包")); - ChartViewHelper.setPieChartData(viewBinding.streetPieChart, pieEntries); - //初始化横向柱状图 -// ChartUtil.initBarChart(this, viewBinding.streetBarChart, horizontalLabelName); - //设置数据 - //TODO 这是模拟数据 - for (int i = 0; i < horizontalLabelName.size(); i++) { - barEntries.add(new BarEntry(i, new Random().nextInt(100))); - } - ChartViewHelper.setBarChartData(viewBinding.streetBarChart, barEntries); - } - - @Override - protected void initEvent() { - viewBinding.titleBarLayout.rightImageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - new TimePickerDialog.Builder() - .setThemeColor(ContextCompat.getColor(context, R.color.mainThemeColor)) - .setTitleStringId("选择日期") - .setWheelItemTextSize(16) - .setCyclic(false) - .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) - .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH) - .setCallBack(new OnDateSetListener() { - @Override - public void onDateSet(TimePickerDialog timePickerView, long millSeconds) { - String date = TimeOrDateUtil.timestampToYearMonth(millSeconds); - viewBinding.titleBarLayout.dateView.setText(date); - } - }).build().show(getSupportFragmentManager(), "year_month"); - } - }); - } -} diff --git a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java index 0a87bdb..d145530 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/TrendAnalysisActivity.java @@ -37,7 +37,7 @@ ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); ImmersionBar.with(this).statusBarDarkFont(false).init(); - viewBinding.titleBarLayout.titleView.setText("趋势分析"); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); //默认显示当前月的分析数据 viewBinding.titleBarLayout.dateView.setText(TimeOrDateUtil.timestampToYearMonth(System.currentTimeMillis())); diff --git a/app/src/main/res/layout/activity_brief_case.xml b/app/src/main/res/layout/activity_brief_case.xml index 535f547..17ee15b 100644 --- a/app/src/main/res/layout/activity_brief_case.xml +++ b/app/src/main/res/layout/activity_brief_case.xml @@ -201,8 +201,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_business_case.xml b/app/src/main/res/layout/activity_business_case.xml index e1ff0d1..db4e023 100644 --- a/app/src/main/res/layout/activity_business_case.xml +++ b/app/src/main/res/layout/activity_business_case.xml @@ -196,8 +196,8 @@ android:id="@+id/addImageRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginHorizontal="@dimen/dp_10" - android:layout_marginBottom="@dimen/dp_10" + android:layout_marginHorizontal="@dimen/dp_7" + android:layout_marginBottom="@dimen/dp_7" android:nestedScrollingEnabled="false" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" app:spanCount="3" /> diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml new file mode 100644 index 0000000..015123a --- /dev/null +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_case_status.xml b/app/src/main/res/layout/activity_case_status.xml deleted file mode 100644 index 015123a..0000000 --- a/app/src/main/res/layout/activity_case_status.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_city_base_data.xml b/app/src/main/res/layout/activity_city_base_data.xml new file mode 100644 index 0000000..91cb65a --- /dev/null +++ b/app/src/main/res/layout/activity_city_base_data.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_common_case.xml b/app/src/main/res/layout/activity_common_case.xml index 450b94c..192ee38 100644 --- a/app/src/main/res/layout/activity_common_case.xml +++ b/app/src/main/res/layout/activity_common_case.xml @@ -230,8 +230,8 @@ diff --git a/app/src/main/res/layout/activity_dept_handle_condition.xml b/app/src/main/res/layout/activity_dept_handle_condition.xml new file mode 100644 index 0000000..0bd5447 --- /dev/null +++ b/app/src/main/res/layout/activity_dept_handle_condition.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_event_resource.xml b/app/src/main/res/layout/activity_event_resource.xml deleted file mode 100644 index 91cb65a..0000000 --- a/app/src/main/res/layout/activity_event_resource.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_grid_analysis.xml b/app/src/main/res/layout/activity_grid_analysis.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_grid_analysis.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_punish_analysis.xml b/app/src/main/res/layout/activity_punish_analysis.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_punish_analysis.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_street_statistics.xml b/app/src/main/res/layout/activity_street_statistics.xml deleted file mode 100644 index 0bd5447..0000000 --- a/app/src/main/res/layout/activity_street_statistics.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file