diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 6ef133c..2eb2f29 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -24,6 +23,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -38,8 +38,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 6ef133c..2eb2f29 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -24,6 +23,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -38,8 +38,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 ee0d084..542c845 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 @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -45,8 +45,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(2)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 6ef133c..2eb2f29 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -24,6 +23,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -38,8 +38,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 ee0d084..542c845 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 @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -45,8 +45,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(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 index e6300b7..c4524e1 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -1,27 +1,151 @@ package com.casic.dcms.view.statistics; +import android.content.Context; +import android.view.View; +import android.widget.RadioGroup; + +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.ColorHub; +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.casic.dcms.widgets.RangeDateActionSheet; +import com.github.mikephil.charting.data.BarEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.divider.ItemDecoration; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; +import java.util.List; public class PunishAnalysisActivity extends AndroidxBaseActivity { + private static final String TAG = "PunishAnalysisActivity"; + private final Context context = PunishAnalysisActivity.this; + private DataAnalysisViewModel dataAnalysisViewModel; + @Override protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(6)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @Override protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.typeStatisticData.observe(this, new Observer() { + @Override + public void onChanged(PunishTypeStatisticBean typeStatisticBean) { + if (typeStatisticBean.getCode() == 200) { + List barEntries = new ArrayList<>(); + PunishTypeStatisticBean.DataModel dataModel = typeStatisticBean.getData(); + barEntries.add(new BarEntry(0, dataModel.getPunish())); + barEntries.add(new BarEntry(1, dataModel.getWarn())); + barEntries.add(new BarEntry(2, dataModel.getPersuade())); + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); + } + } + }); + dataAnalysisViewModel.rankingData.observe(this, new Observer() { + @Override + public void onChanged(PunishRankingBean rankingBean) { + if (rankingBean.getCode() == 200) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, rankingBean.getData()) { + @Override + public void convertView(ViewHolder viewHolder, int position, PunishRankingBean.DataModel item) { + //设置随机颜色 + int[] color = ColorHub.generateColor(context); + + viewHolder.setText(R.id.numberTagView, String.valueOf(position + 1)) + .setBackgroundColor(R.id.numberTagView, color[0]) + .setTextColor(R.id.numberTagView, color[1]) + .setText(R.id.caseSourceView, item.getMerchantName()) + .setText(R.id.caseNumView, item.getNum()); + } + }; + viewBinding.rankingRecyclerView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.rankingRecyclerView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, PunishRankingBean.DataModel dataModel) { + + } + }); + } + } + }); } @Override protected void observeRequestState() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getPunishTypeStatistic(startDate, endDate); + dataAnalysisViewModel.getPunishRanking(startDate, endDate); + } + }).build().show(); + } + }); + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } + } + }); } } diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 6ef133c..2eb2f29 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -24,6 +23,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -38,8 +38,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 ee0d084..542c845 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 @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -45,8 +45,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(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 index e6300b7..c4524e1 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -1,27 +1,151 @@ package com.casic.dcms.view.statistics; +import android.content.Context; +import android.view.View; +import android.widget.RadioGroup; + +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.ColorHub; +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.casic.dcms.widgets.RangeDateActionSheet; +import com.github.mikephil.charting.data.BarEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.divider.ItemDecoration; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; +import java.util.List; public class PunishAnalysisActivity extends AndroidxBaseActivity { + private static final String TAG = "PunishAnalysisActivity"; + private final Context context = PunishAnalysisActivity.this; + private DataAnalysisViewModel dataAnalysisViewModel; + @Override protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(6)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @Override protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.typeStatisticData.observe(this, new Observer() { + @Override + public void onChanged(PunishTypeStatisticBean typeStatisticBean) { + if (typeStatisticBean.getCode() == 200) { + List barEntries = new ArrayList<>(); + PunishTypeStatisticBean.DataModel dataModel = typeStatisticBean.getData(); + barEntries.add(new BarEntry(0, dataModel.getPunish())); + barEntries.add(new BarEntry(1, dataModel.getWarn())); + barEntries.add(new BarEntry(2, dataModel.getPersuade())); + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); + } + } + }); + dataAnalysisViewModel.rankingData.observe(this, new Observer() { + @Override + public void onChanged(PunishRankingBean rankingBean) { + if (rankingBean.getCode() == 200) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, rankingBean.getData()) { + @Override + public void convertView(ViewHolder viewHolder, int position, PunishRankingBean.DataModel item) { + //设置随机颜色 + int[] color = ColorHub.generateColor(context); + + viewHolder.setText(R.id.numberTagView, String.valueOf(position + 1)) + .setBackgroundColor(R.id.numberTagView, color[0]) + .setTextColor(R.id.numberTagView, color[1]) + .setText(R.id.caseSourceView, item.getMerchantName()) + .setText(R.id.caseNumView, item.getNum()); + } + }; + viewBinding.rankingRecyclerView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.rankingRecyclerView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, PunishRankingBean.DataModel dataModel) { + + } + }); + } + } + }); } @Override protected void observeRequestState() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getPunishTypeStatistic(startDate, endDate); + dataAnalysisViewModel.getPunishRanking(startDate, endDate); + } + }).build().show(); + } + }); + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } + } + }); } } 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 b3c38be..8e03bfe 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 @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -26,6 +25,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -41,8 +41,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 6ef133c..2eb2f29 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -24,6 +23,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -38,8 +38,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 ee0d084..542c845 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 @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -45,8 +45,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(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 index e6300b7..c4524e1 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -1,27 +1,151 @@ package com.casic.dcms.view.statistics; +import android.content.Context; +import android.view.View; +import android.widget.RadioGroup; + +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.ColorHub; +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.casic.dcms.widgets.RangeDateActionSheet; +import com.github.mikephil.charting.data.BarEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.divider.ItemDecoration; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; +import java.util.List; public class PunishAnalysisActivity extends AndroidxBaseActivity { + private static final String TAG = "PunishAnalysisActivity"; + private final Context context = PunishAnalysisActivity.this; + private DataAnalysisViewModel dataAnalysisViewModel; + @Override protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(6)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @Override protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.typeStatisticData.observe(this, new Observer() { + @Override + public void onChanged(PunishTypeStatisticBean typeStatisticBean) { + if (typeStatisticBean.getCode() == 200) { + List barEntries = new ArrayList<>(); + PunishTypeStatisticBean.DataModel dataModel = typeStatisticBean.getData(); + barEntries.add(new BarEntry(0, dataModel.getPunish())); + barEntries.add(new BarEntry(1, dataModel.getWarn())); + barEntries.add(new BarEntry(2, dataModel.getPersuade())); + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); + } + } + }); + dataAnalysisViewModel.rankingData.observe(this, new Observer() { + @Override + public void onChanged(PunishRankingBean rankingBean) { + if (rankingBean.getCode() == 200) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, rankingBean.getData()) { + @Override + public void convertView(ViewHolder viewHolder, int position, PunishRankingBean.DataModel item) { + //设置随机颜色 + int[] color = ColorHub.generateColor(context); + + viewHolder.setText(R.id.numberTagView, String.valueOf(position + 1)) + .setBackgroundColor(R.id.numberTagView, color[0]) + .setTextColor(R.id.numberTagView, color[1]) + .setText(R.id.caseSourceView, item.getMerchantName()) + .setText(R.id.caseNumView, item.getNum()); + } + }; + viewBinding.rankingRecyclerView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.rankingRecyclerView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, PunishRankingBean.DataModel dataModel) { + + } + }); + } + } + }); } @Override protected void observeRequestState() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getPunishTypeStatistic(startDate, endDate); + dataAnalysisViewModel.getPunishRanking(startDate, endDate); + } + }).build().show(); + } + }); + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } + } + }); } } 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 b3c38be..8e03bfe 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 @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -26,6 +25,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -41,8 +41,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java index ac06208..8742670 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -8,6 +8,8 @@ import com.casic.dcms.model.DeptHandleConditionBean; import com.casic.dcms.model.GridAnalysisBean; import com.casic.dcms.model.HighEventBean; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; import com.google.gson.Gson; @@ -30,6 +32,8 @@ public MutableLiveData deptHandleConditionModel = new MutableLiveData<>(); public MutableLiveData gridAnalysisData = new MutableLiveData<>(); public MutableLiveData caseTendencyData = new MutableLiveData<>(); + public MutableLiveData typeStatisticData = new MutableLiveData<>(); + public MutableLiveData rankingData = new MutableLiveData<>(); public void getCityBaseData() { loadState.setValue(LoadState.Loading); @@ -228,4 +232,67 @@ } }); } + + public void getPunishTypeStatistic(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getPunishTypeStatistic(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishTypeStatisticBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + typeStatisticData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getPunishRanking(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getPunishRanking(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishRankingBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + rankingData.setValue(resultBean); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } } diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 6ef133c..2eb2f29 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -24,6 +23,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -38,8 +38,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 ee0d084..542c845 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 @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -45,8 +45,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(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 index e6300b7..c4524e1 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -1,27 +1,151 @@ package com.casic.dcms.view.statistics; +import android.content.Context; +import android.view.View; +import android.widget.RadioGroup; + +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.ColorHub; +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.casic.dcms.widgets.RangeDateActionSheet; +import com.github.mikephil.charting.data.BarEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.divider.ItemDecoration; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; +import java.util.List; public class PunishAnalysisActivity extends AndroidxBaseActivity { + private static final String TAG = "PunishAnalysisActivity"; + private final Context context = PunishAnalysisActivity.this; + private DataAnalysisViewModel dataAnalysisViewModel; + @Override protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(6)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @Override protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.typeStatisticData.observe(this, new Observer() { + @Override + public void onChanged(PunishTypeStatisticBean typeStatisticBean) { + if (typeStatisticBean.getCode() == 200) { + List barEntries = new ArrayList<>(); + PunishTypeStatisticBean.DataModel dataModel = typeStatisticBean.getData(); + barEntries.add(new BarEntry(0, dataModel.getPunish())); + barEntries.add(new BarEntry(1, dataModel.getWarn())); + barEntries.add(new BarEntry(2, dataModel.getPersuade())); + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); + } + } + }); + dataAnalysisViewModel.rankingData.observe(this, new Observer() { + @Override + public void onChanged(PunishRankingBean rankingBean) { + if (rankingBean.getCode() == 200) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, rankingBean.getData()) { + @Override + public void convertView(ViewHolder viewHolder, int position, PunishRankingBean.DataModel item) { + //设置随机颜色 + int[] color = ColorHub.generateColor(context); + + viewHolder.setText(R.id.numberTagView, String.valueOf(position + 1)) + .setBackgroundColor(R.id.numberTagView, color[0]) + .setTextColor(R.id.numberTagView, color[1]) + .setText(R.id.caseSourceView, item.getMerchantName()) + .setText(R.id.caseNumView, item.getNum()); + } + }; + viewBinding.rankingRecyclerView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.rankingRecyclerView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, PunishRankingBean.DataModel dataModel) { + + } + }); + } + } + }); } @Override protected void observeRequestState() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getPunishTypeStatistic(startDate, endDate); + dataAnalysisViewModel.getPunishRanking(startDate, endDate); + } + }).build().show(); + } + }); + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } + } + }); } } 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 b3c38be..8e03bfe 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 @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -26,6 +25,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -41,8 +41,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java index ac06208..8742670 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -8,6 +8,8 @@ import com.casic.dcms.model.DeptHandleConditionBean; import com.casic.dcms.model.GridAnalysisBean; import com.casic.dcms.model.HighEventBean; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; import com.google.gson.Gson; @@ -30,6 +32,8 @@ public MutableLiveData deptHandleConditionModel = new MutableLiveData<>(); public MutableLiveData gridAnalysisData = new MutableLiveData<>(); public MutableLiveData caseTendencyData = new MutableLiveData<>(); + public MutableLiveData typeStatisticData = new MutableLiveData<>(); + public MutableLiveData rankingData = new MutableLiveData<>(); public void getCityBaseData() { loadState.setValue(LoadState.Loading); @@ -228,4 +232,67 @@ } }); } + + public void getPunishTypeStatistic(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getPunishTypeStatistic(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishTypeStatisticBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + typeStatisticData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getPunishRanking(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getPunishRanking(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishRankingBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + rankingData.setValue(resultBean); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } } diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 671d92b..afdaa4a 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,7 +7,7 @@ + layout="@layout/include_sub_base_title" /> data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 6ef133c..2eb2f29 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -24,6 +23,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -38,8 +38,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 ee0d084..542c845 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 @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -45,8 +45,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(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 index e6300b7..c4524e1 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -1,27 +1,151 @@ package com.casic.dcms.view.statistics; +import android.content.Context; +import android.view.View; +import android.widget.RadioGroup; + +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.ColorHub; +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.casic.dcms.widgets.RangeDateActionSheet; +import com.github.mikephil.charting.data.BarEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.divider.ItemDecoration; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; +import java.util.List; public class PunishAnalysisActivity extends AndroidxBaseActivity { + private static final String TAG = "PunishAnalysisActivity"; + private final Context context = PunishAnalysisActivity.this; + private DataAnalysisViewModel dataAnalysisViewModel; + @Override protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(6)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @Override protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.typeStatisticData.observe(this, new Observer() { + @Override + public void onChanged(PunishTypeStatisticBean typeStatisticBean) { + if (typeStatisticBean.getCode() == 200) { + List barEntries = new ArrayList<>(); + PunishTypeStatisticBean.DataModel dataModel = typeStatisticBean.getData(); + barEntries.add(new BarEntry(0, dataModel.getPunish())); + barEntries.add(new BarEntry(1, dataModel.getWarn())); + barEntries.add(new BarEntry(2, dataModel.getPersuade())); + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); + } + } + }); + dataAnalysisViewModel.rankingData.observe(this, new Observer() { + @Override + public void onChanged(PunishRankingBean rankingBean) { + if (rankingBean.getCode() == 200) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, rankingBean.getData()) { + @Override + public void convertView(ViewHolder viewHolder, int position, PunishRankingBean.DataModel item) { + //设置随机颜色 + int[] color = ColorHub.generateColor(context); + + viewHolder.setText(R.id.numberTagView, String.valueOf(position + 1)) + .setBackgroundColor(R.id.numberTagView, color[0]) + .setTextColor(R.id.numberTagView, color[1]) + .setText(R.id.caseSourceView, item.getMerchantName()) + .setText(R.id.caseNumView, item.getNum()); + } + }; + viewBinding.rankingRecyclerView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.rankingRecyclerView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, PunishRankingBean.DataModel dataModel) { + + } + }); + } + } + }); } @Override protected void observeRequestState() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getPunishTypeStatistic(startDate, endDate); + dataAnalysisViewModel.getPunishRanking(startDate, endDate); + } + }).build().show(); + } + }); + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } + } + }); } } 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 b3c38be..8e03bfe 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 @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -26,6 +25,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -41,8 +41,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java index ac06208..8742670 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -8,6 +8,8 @@ import com.casic.dcms.model.DeptHandleConditionBean; import com.casic.dcms.model.GridAnalysisBean; import com.casic.dcms.model.HighEventBean; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; import com.google.gson.Gson; @@ -30,6 +32,8 @@ public MutableLiveData deptHandleConditionModel = new MutableLiveData<>(); public MutableLiveData gridAnalysisData = new MutableLiveData<>(); public MutableLiveData caseTendencyData = new MutableLiveData<>(); + public MutableLiveData typeStatisticData = new MutableLiveData<>(); + public MutableLiveData rankingData = new MutableLiveData<>(); public void getCityBaseData() { loadState.setValue(LoadState.Loading); @@ -228,4 +232,67 @@ } }); } + + public void getPunishTypeStatistic(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getPunishTypeStatistic(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishTypeStatisticBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + typeStatisticData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getPunishRanking(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getPunishRanking(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishRankingBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + rankingData.setValue(resultBean); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } } diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 671d92b..afdaa4a 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,7 +7,7 @@ + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 6ef133c..2eb2f29 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -24,6 +23,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -38,8 +38,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 ee0d084..542c845 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 @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -45,8 +45,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(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 index e6300b7..c4524e1 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -1,27 +1,151 @@ package com.casic.dcms.view.statistics; +import android.content.Context; +import android.view.View; +import android.widget.RadioGroup; + +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.ColorHub; +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.casic.dcms.widgets.RangeDateActionSheet; +import com.github.mikephil.charting.data.BarEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.divider.ItemDecoration; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; +import java.util.List; public class PunishAnalysisActivity extends AndroidxBaseActivity { + private static final String TAG = "PunishAnalysisActivity"; + private final Context context = PunishAnalysisActivity.this; + private DataAnalysisViewModel dataAnalysisViewModel; + @Override protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(6)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @Override protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.typeStatisticData.observe(this, new Observer() { + @Override + public void onChanged(PunishTypeStatisticBean typeStatisticBean) { + if (typeStatisticBean.getCode() == 200) { + List barEntries = new ArrayList<>(); + PunishTypeStatisticBean.DataModel dataModel = typeStatisticBean.getData(); + barEntries.add(new BarEntry(0, dataModel.getPunish())); + barEntries.add(new BarEntry(1, dataModel.getWarn())); + barEntries.add(new BarEntry(2, dataModel.getPersuade())); + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); + } + } + }); + dataAnalysisViewModel.rankingData.observe(this, new Observer() { + @Override + public void onChanged(PunishRankingBean rankingBean) { + if (rankingBean.getCode() == 200) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, rankingBean.getData()) { + @Override + public void convertView(ViewHolder viewHolder, int position, PunishRankingBean.DataModel item) { + //设置随机颜色 + int[] color = ColorHub.generateColor(context); + + viewHolder.setText(R.id.numberTagView, String.valueOf(position + 1)) + .setBackgroundColor(R.id.numberTagView, color[0]) + .setTextColor(R.id.numberTagView, color[1]) + .setText(R.id.caseSourceView, item.getMerchantName()) + .setText(R.id.caseNumView, item.getNum()); + } + }; + viewBinding.rankingRecyclerView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.rankingRecyclerView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, PunishRankingBean.DataModel dataModel) { + + } + }); + } + } + }); } @Override protected void observeRequestState() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getPunishTypeStatistic(startDate, endDate); + dataAnalysisViewModel.getPunishRanking(startDate, endDate); + } + }).build().show(); + } + }); + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } + } + }); } } 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 b3c38be..8e03bfe 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 @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -26,6 +25,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -41,8 +41,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java index ac06208..8742670 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -8,6 +8,8 @@ import com.casic.dcms.model.DeptHandleConditionBean; import com.casic.dcms.model.GridAnalysisBean; import com.casic.dcms.model.HighEventBean; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; import com.google.gson.Gson; @@ -30,6 +32,8 @@ public MutableLiveData deptHandleConditionModel = new MutableLiveData<>(); public MutableLiveData gridAnalysisData = new MutableLiveData<>(); public MutableLiveData caseTendencyData = new MutableLiveData<>(); + public MutableLiveData typeStatisticData = new MutableLiveData<>(); + public MutableLiveData rankingData = new MutableLiveData<>(); public void getCityBaseData() { loadState.setValue(LoadState.Loading); @@ -228,4 +232,67 @@ } }); } + + public void getPunishTypeStatistic(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getPunishTypeStatistic(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishTypeStatisticBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + typeStatisticData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getPunishRanking(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getPunishRanking(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishRankingBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + rankingData.setValue(resultBean); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } } diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 671d92b..afdaa4a 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,7 +7,7 @@ + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 6ef133c..2eb2f29 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -24,6 +23,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -38,8 +38,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 ee0d084..542c845 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 @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -45,8 +45,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(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 index e6300b7..c4524e1 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -1,27 +1,151 @@ package com.casic.dcms.view.statistics; +import android.content.Context; +import android.view.View; +import android.widget.RadioGroup; + +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.ColorHub; +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.casic.dcms.widgets.RangeDateActionSheet; +import com.github.mikephil.charting.data.BarEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.divider.ItemDecoration; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; +import java.util.List; public class PunishAnalysisActivity extends AndroidxBaseActivity { + private static final String TAG = "PunishAnalysisActivity"; + private final Context context = PunishAnalysisActivity.this; + private DataAnalysisViewModel dataAnalysisViewModel; + @Override protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(6)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @Override protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.typeStatisticData.observe(this, new Observer() { + @Override + public void onChanged(PunishTypeStatisticBean typeStatisticBean) { + if (typeStatisticBean.getCode() == 200) { + List barEntries = new ArrayList<>(); + PunishTypeStatisticBean.DataModel dataModel = typeStatisticBean.getData(); + barEntries.add(new BarEntry(0, dataModel.getPunish())); + barEntries.add(new BarEntry(1, dataModel.getWarn())); + barEntries.add(new BarEntry(2, dataModel.getPersuade())); + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); + } + } + }); + dataAnalysisViewModel.rankingData.observe(this, new Observer() { + @Override + public void onChanged(PunishRankingBean rankingBean) { + if (rankingBean.getCode() == 200) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, rankingBean.getData()) { + @Override + public void convertView(ViewHolder viewHolder, int position, PunishRankingBean.DataModel item) { + //设置随机颜色 + int[] color = ColorHub.generateColor(context); + + viewHolder.setText(R.id.numberTagView, String.valueOf(position + 1)) + .setBackgroundColor(R.id.numberTagView, color[0]) + .setTextColor(R.id.numberTagView, color[1]) + .setText(R.id.caseSourceView, item.getMerchantName()) + .setText(R.id.caseNumView, item.getNum()); + } + }; + viewBinding.rankingRecyclerView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.rankingRecyclerView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, PunishRankingBean.DataModel dataModel) { + + } + }); + } + } + }); } @Override protected void observeRequestState() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getPunishTypeStatistic(startDate, endDate); + dataAnalysisViewModel.getPunishRanking(startDate, endDate); + } + }).build().show(); + } + }); + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } + } + }); } } 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 b3c38be..8e03bfe 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 @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -26,6 +25,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -41,8 +41,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java index ac06208..8742670 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -8,6 +8,8 @@ import com.casic.dcms.model.DeptHandleConditionBean; import com.casic.dcms.model.GridAnalysisBean; import com.casic.dcms.model.HighEventBean; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; import com.google.gson.Gson; @@ -30,6 +32,8 @@ public MutableLiveData deptHandleConditionModel = new MutableLiveData<>(); public MutableLiveData gridAnalysisData = new MutableLiveData<>(); public MutableLiveData caseTendencyData = new MutableLiveData<>(); + public MutableLiveData typeStatisticData = new MutableLiveData<>(); + public MutableLiveData rankingData = new MutableLiveData<>(); public void getCityBaseData() { loadState.setValue(LoadState.Loading); @@ -228,4 +232,67 @@ } }); } + + public void getPunishTypeStatistic(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getPunishTypeStatistic(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishTypeStatisticBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + typeStatisticData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getPunishRanking(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getPunishRanking(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishRankingBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + rankingData.setValue(resultBean); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } } diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 671d92b..afdaa4a 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,7 +7,7 @@ + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 6ef133c..2eb2f29 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -24,6 +23,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -38,8 +38,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 ee0d084..542c845 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 @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -45,8 +45,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(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 index e6300b7..c4524e1 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -1,27 +1,151 @@ package com.casic.dcms.view.statistics; +import android.content.Context; +import android.view.View; +import android.widget.RadioGroup; + +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.ColorHub; +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.casic.dcms.widgets.RangeDateActionSheet; +import com.github.mikephil.charting.data.BarEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.divider.ItemDecoration; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; +import java.util.List; public class PunishAnalysisActivity extends AndroidxBaseActivity { + private static final String TAG = "PunishAnalysisActivity"; + private final Context context = PunishAnalysisActivity.this; + private DataAnalysisViewModel dataAnalysisViewModel; + @Override protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(6)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @Override protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.typeStatisticData.observe(this, new Observer() { + @Override + public void onChanged(PunishTypeStatisticBean typeStatisticBean) { + if (typeStatisticBean.getCode() == 200) { + List barEntries = new ArrayList<>(); + PunishTypeStatisticBean.DataModel dataModel = typeStatisticBean.getData(); + barEntries.add(new BarEntry(0, dataModel.getPunish())); + barEntries.add(new BarEntry(1, dataModel.getWarn())); + barEntries.add(new BarEntry(2, dataModel.getPersuade())); + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); + } + } + }); + dataAnalysisViewModel.rankingData.observe(this, new Observer() { + @Override + public void onChanged(PunishRankingBean rankingBean) { + if (rankingBean.getCode() == 200) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, rankingBean.getData()) { + @Override + public void convertView(ViewHolder viewHolder, int position, PunishRankingBean.DataModel item) { + //设置随机颜色 + int[] color = ColorHub.generateColor(context); + + viewHolder.setText(R.id.numberTagView, String.valueOf(position + 1)) + .setBackgroundColor(R.id.numberTagView, color[0]) + .setTextColor(R.id.numberTagView, color[1]) + .setText(R.id.caseSourceView, item.getMerchantName()) + .setText(R.id.caseNumView, item.getNum()); + } + }; + viewBinding.rankingRecyclerView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.rankingRecyclerView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, PunishRankingBean.DataModel dataModel) { + + } + }); + } + } + }); } @Override protected void observeRequestState() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getPunishTypeStatistic(startDate, endDate); + dataAnalysisViewModel.getPunishRanking(startDate, endDate); + } + }).build().show(); + } + }); + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } + } + }); } } 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 b3c38be..8e03bfe 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 @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -26,6 +25,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -41,8 +41,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java index ac06208..8742670 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -8,6 +8,8 @@ import com.casic.dcms.model.DeptHandleConditionBean; import com.casic.dcms.model.GridAnalysisBean; import com.casic.dcms.model.HighEventBean; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; import com.google.gson.Gson; @@ -30,6 +32,8 @@ public MutableLiveData deptHandleConditionModel = new MutableLiveData<>(); public MutableLiveData gridAnalysisData = new MutableLiveData<>(); public MutableLiveData caseTendencyData = new MutableLiveData<>(); + public MutableLiveData typeStatisticData = new MutableLiveData<>(); + public MutableLiveData rankingData = new MutableLiveData<>(); public void getCityBaseData() { loadState.setValue(LoadState.Loading); @@ -228,4 +232,67 @@ } }); } + + public void getPunishTypeStatistic(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getPunishTypeStatistic(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishTypeStatisticBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + typeStatisticData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getPunishRanking(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getPunishRanking(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishRankingBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + rankingData.setValue(resultBean); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } } diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 671d92b..afdaa4a 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,7 +7,7 @@ + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 6ef133c..2eb2f29 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -24,6 +23,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -38,8 +38,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 ee0d084..542c845 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 @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -45,8 +45,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(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 index e6300b7..c4524e1 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -1,27 +1,151 @@ package com.casic.dcms.view.statistics; +import android.content.Context; +import android.view.View; +import android.widget.RadioGroup; + +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.ColorHub; +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.casic.dcms.widgets.RangeDateActionSheet; +import com.github.mikephil.charting.data.BarEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.divider.ItemDecoration; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; +import java.util.List; public class PunishAnalysisActivity extends AndroidxBaseActivity { + private static final String TAG = "PunishAnalysisActivity"; + private final Context context = PunishAnalysisActivity.this; + private DataAnalysisViewModel dataAnalysisViewModel; + @Override protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(6)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @Override protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.typeStatisticData.observe(this, new Observer() { + @Override + public void onChanged(PunishTypeStatisticBean typeStatisticBean) { + if (typeStatisticBean.getCode() == 200) { + List barEntries = new ArrayList<>(); + PunishTypeStatisticBean.DataModel dataModel = typeStatisticBean.getData(); + barEntries.add(new BarEntry(0, dataModel.getPunish())); + barEntries.add(new BarEntry(1, dataModel.getWarn())); + barEntries.add(new BarEntry(2, dataModel.getPersuade())); + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); + } + } + }); + dataAnalysisViewModel.rankingData.observe(this, new Observer() { + @Override + public void onChanged(PunishRankingBean rankingBean) { + if (rankingBean.getCode() == 200) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, rankingBean.getData()) { + @Override + public void convertView(ViewHolder viewHolder, int position, PunishRankingBean.DataModel item) { + //设置随机颜色 + int[] color = ColorHub.generateColor(context); + + viewHolder.setText(R.id.numberTagView, String.valueOf(position + 1)) + .setBackgroundColor(R.id.numberTagView, color[0]) + .setTextColor(R.id.numberTagView, color[1]) + .setText(R.id.caseSourceView, item.getMerchantName()) + .setText(R.id.caseNumView, item.getNum()); + } + }; + viewBinding.rankingRecyclerView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.rankingRecyclerView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, PunishRankingBean.DataModel dataModel) { + + } + }); + } + } + }); } @Override protected void observeRequestState() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getPunishTypeStatistic(startDate, endDate); + dataAnalysisViewModel.getPunishRanking(startDate, endDate); + } + }).build().show(); + } + }); + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } + } + }); } } 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 b3c38be..8e03bfe 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 @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -26,6 +25,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -41,8 +41,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java index ac06208..8742670 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -8,6 +8,8 @@ import com.casic.dcms.model.DeptHandleConditionBean; import com.casic.dcms.model.GridAnalysisBean; import com.casic.dcms.model.HighEventBean; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; import com.google.gson.Gson; @@ -30,6 +32,8 @@ public MutableLiveData deptHandleConditionModel = new MutableLiveData<>(); public MutableLiveData gridAnalysisData = new MutableLiveData<>(); public MutableLiveData caseTendencyData = new MutableLiveData<>(); + public MutableLiveData typeStatisticData = new MutableLiveData<>(); + public MutableLiveData rankingData = new MutableLiveData<>(); public void getCityBaseData() { loadState.setValue(LoadState.Loading); @@ -228,4 +232,67 @@ } }); } + + public void getPunishTypeStatistic(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getPunishTypeStatistic(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishTypeStatisticBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + typeStatisticData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getPunishRanking(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getPunishRanking(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishRankingBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + rankingData.setValue(resultBean); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } } diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 671d92b..afdaa4a 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,7 +7,7 @@ + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> - + android:layout_height="match_parent" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java new file mode 100644 index 0000000..e2549cd --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishRankingBean.java @@ -0,0 +1,73 @@ +package com.casic.dcms.model; + +import java.util.List; + +public class PunishRankingBean { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private String shopCode; + private String num; + private String merchantName; + + public String getShopCode() { + return shopCode; + } + + public void setShopCode(String shopCode) { + this.shopCode = shopCode; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getMerchantName() { + return merchantName; + } + + public void setMerchantName(String merchantName) { + this.merchantName = merchantName; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java new file mode 100644 index 0000000..cfae2da --- /dev/null +++ b/app/src/main/java/com/casic/dcms/model/PunishTypeStatisticBean.java @@ -0,0 +1,71 @@ +package com.casic.dcms.model; + +public class PunishTypeStatisticBean { + + private int code; + private DataModel data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataModel getData() { + return data; + } + + public void setData(DataModel data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public static class DataModel { + private int warn; + private int punish; + private int persuade; + + public int getWarn() { + return warn; + } + + public void setWarn(int warn) { + this.warn = warn; + } + + public int getPunish() { + return punish; + } + + public void setPunish(int punish) { + this.punish = punish; + } + + public int getPersuade() { + return persuade; + } + + public void setPersuade(int persuade) { + this.persuade = persuade; + } + } +} diff --git a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java index 9d752cf..6151859 100644 --- a/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java +++ b/app/src/main/java/com/casic/dcms/utils/ChartViewHelper.java @@ -7,6 +7,7 @@ import com.casic.dcms.base.BaseApplication; import com.casic.dcms.widgets.DetailsMarkerView; import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.HorizontalBarChart; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.PieChart; @@ -150,6 +151,53 @@ chart.invalidate(); } + private static void initBarChart(BarChart chart) { + chart.setDrawGridBackground(false); + chart.setDrawBorders(false); + chart.setScaleEnabled(false); + //去掉描述 + chart.getDescription().setEnabled(false); + //设置图例位置 + Legend legend = chart.getLegend(); + legend.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM); + legend.setHorizontalAlignment(Legend.LegendHorizontalAlignment.CENTER); + legend.setOrientation(Legend.LegendOrientation.HORIZONTAL); + legend.setWordWrapEnabled(true); + + XAxis xAxis = chart.getXAxis(); + xAxis.setTextColor(IntHub.convertColor(BaseApplication.get(), R.color.mainTextColor)); + xAxis.setTextSize(12f); + xAxis.setDrawLabels(false);//绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true);//是否绘制轴线 + xAxis.setDrawGridLines(false);//设置x轴上每个点对应的线 + xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); + //设置样式 + YAxis rightAxis = chart.getAxisRight(); + //设置图表右边的y轴禁用 + rightAxis.setEnabled(false); + YAxis leftAxis = chart.getAxisLeft(); + leftAxis.setAxisMinimum(0f); + } + + public static void setBarChartData(BarChart chart, List barEntries) { + initBarChart(chart); + DecimalFormat decimalFormat = new DecimalFormat("##0"); + //绑定数据 + BarDataSet totalCheckBarDataSet = new BarDataSet(barEntries, "数量"); + totalCheckBarDataSet.setColor(IntHub.convertColor(BaseApplication.get(), R.color.barChartColor)); + totalCheckBarDataSet.setValueFormatter(new ValueFormatter() { + @Override + public String getFormattedValue(float value) { + return decimalFormat.format(value); + } + }); + + BarData barData = new BarData(totalCheckBarDataSet); + barData.setBarWidth(0.5f); + chart.setData(barData); + chart.invalidate(); + } + private static void initLineChart(LineChart chart, List dates) { chart.setDrawGridBackground(false); chart.setDrawBorders(false); diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java index b1ea831..f873659 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitService.java @@ -219,7 +219,7 @@ /** * 商铺处罚类型统计 */ - @GET("/punish/type-statistic") + @GET("/shop/punish/type-statistic") Observable getPunishType( @Header("token") String token, @Query("beginTime") String beginTime, @@ -229,7 +229,7 @@ /** * 商铺处罚排行榜 */ - @GET("/punish/ranking") + @GET("/shop/punish/ranking") Observable getPunishRanking( @Header("token") String token, @Query("beginTime") String beginTime, diff --git a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java index 9a30c8a..f73e546 100644 --- a/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java +++ b/app/src/main/java/com/casic/dcms/utils/retrofit/RetrofitServiceManager.java @@ -22,6 +22,10 @@ RetrofitService.class ); + private static final RetrofitService shopApi = RetrofitFactory.createRetrofit( + "http://111.198.10.15:11409", RetrofitService.class + ); + /** * 验证PublicKey */ @@ -155,15 +159,15 @@ /** * 商铺处罚类型统计 */ - public static Observable getPunishType(String begTime, String endTime) { - return api.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); + public static Observable getPunishTypeStatistic(String begTime, String endTime) { + return shopApi.getPunishType(AuthenticationHelper.getToken(), begTime, endTime); } /** * 商铺处罚排行榜 */ public static Observable getPunishRanking(String begTime, String endTime) { - return api.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); + return shopApi.getPunishRanking(AuthenticationHelper.getToken(), begTime, endTime); } /** 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 index 83aab76..2b06ca4 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(1)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index a8bad4d..60e8f45 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CityBaseDataActivity.java @@ -2,7 +2,6 @@ import android.content.Context; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -17,6 +16,7 @@ import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; 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.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -33,8 +33,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(0)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 5d517db..b85ad09 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/DeptHandleConditionActivity.java @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -46,8 +46,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(3)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 index 6ef133c..2eb2f29 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/GridAnalysisActivity.java @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -24,6 +23,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -38,8 +38,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(4)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); 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 ee0d084..542c845 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 @@ -4,7 +4,6 @@ import android.view.View; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -25,6 +24,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -45,8 +45,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(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 index e6300b7..c4524e1 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/PunishAnalysisActivity.java @@ -1,27 +1,151 @@ package com.casic.dcms.view.statistics; +import android.content.Context; +import android.view.View; +import android.widget.RadioGroup; + +import androidx.lifecycle.Observer; +import androidx.lifecycle.ViewModelProvider; + +import com.casic.dcms.R; import com.casic.dcms.databinding.ActivityPunishAnalysisBinding; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; +import com.casic.dcms.utils.ChartViewHelper; +import com.casic.dcms.utils.ColorHub; +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.casic.dcms.widgets.RangeDateActionSheet; +import com.github.mikephil.charting.data.BarEntry; +import com.gyf.immersionbar.ImmersionBar; +import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; +import com.pengxh.androidx.lite.adapter.ViewHolder; import com.pengxh.androidx.lite.base.AndroidxBaseActivity; +import com.pengxh.androidx.lite.divider.ItemDecoration; +import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; +import com.pengxh.androidx.lite.hub.LongHub; +import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; +import com.pengxh.androidx.lite.vm.LoadState; + +import java.util.ArrayList; +import java.util.List; public class PunishAnalysisActivity extends AndroidxBaseActivity { + private static final String TAG = "PunishAnalysisActivity"; + private final Context context = PunishAnalysisActivity.this; + private DataAnalysisViewModel dataAnalysisViewModel; + @Override protected void setupTopBarLayout() { + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); + viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(6)); + viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); } @Override protected void initData() { + dataAnalysisViewModel = new ViewModelProvider(this).get(DataAnalysisViewModel.class); + dataAnalysisViewModel.typeStatisticData.observe(this, new Observer() { + @Override + public void onChanged(PunishTypeStatisticBean typeStatisticBean) { + if (typeStatisticBean.getCode() == 200) { + List barEntries = new ArrayList<>(); + PunishTypeStatisticBean.DataModel dataModel = typeStatisticBean.getData(); + barEntries.add(new BarEntry(0, dataModel.getPunish())); + barEntries.add(new BarEntry(1, dataModel.getWarn())); + barEntries.add(new BarEntry(2, dataModel.getPersuade())); + ChartViewHelper.setBarChartData(viewBinding.barChart, barEntries); + } + } + }); + dataAnalysisViewModel.rankingData.observe(this, new Observer() { + @Override + public void onChanged(PunishRankingBean rankingBean) { + if (rankingBean.getCode() == 200) { + NormalRecyclerAdapter recyclerAdapter = new NormalRecyclerAdapter(R.layout.item_case_resource_lv_l, rankingBean.getData()) { + @Override + public void convertView(ViewHolder viewHolder, int position, PunishRankingBean.DataModel item) { + //设置随机颜色 + int[] color = ColorHub.generateColor(context); + + viewHolder.setText(R.id.numberTagView, String.valueOf(position + 1)) + .setBackgroundColor(R.id.numberTagView, color[0]) + .setTextColor(R.id.numberTagView, color[1]) + .setText(R.id.caseSourceView, item.getMerchantName()) + .setText(R.id.caseNumView, item.getNum()); + } + }; + viewBinding.rankingRecyclerView.addItemDecoration(new ItemDecoration(FloatHub.dp2px(context, 75), FloatHub.dp2px(context, 15))); + viewBinding.rankingRecyclerView.setAdapter(recyclerAdapter); + recyclerAdapter.setOnItemClickedListener(new NormalRecyclerAdapter.OnItemClickedListener() { + @Override + public void onItemClicked(int position, PunishRankingBean.DataModel dataModel) { + + } + }); + } + } + }); } @Override protected void observeRequestState() { + dataAnalysisViewModel.loadState.observe(this, new Observer() { + @Override + public void onChanged(LoadState loadState) { + if (loadState == LoadState.Loading) { + DialogHelper.showLoadingDialog(context, "数据加载中,请稍后"); + } else { + DialogHelper.dismissLoadingDialog(); + } + } + }); + } + @Override + protected void onResume() { + super.onResume(); + //默认加载当前时间往前一个月的 + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); } @Override protected void initEvent() { + viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getPunishTypeStatistic(startDate, endDate); + dataAnalysisViewModel.getPunishRanking(startDate, endDate); + } + }).build().show(); + } + }); + viewBinding.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if (checkedId == R.id.oneMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getOneMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else if (checkedId == R.id.threeMonthRadioButton) { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getThreeMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } else { + dataAnalysisViewModel.getPunishTypeStatistic(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + dataAnalysisViewModel.getPunishRanking(TimeOrDateUtil.getSixMonthDate(), LongHub.timestampToDate(System.currentTimeMillis())); + } + } + }); } } 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 b3c38be..8e03bfe 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 @@ -5,7 +5,6 @@ import android.widget.ProgressBar; import android.widget.RadioGroup; -import androidx.core.content.ContextCompat; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; @@ -26,6 +25,7 @@ import com.pengxh.androidx.lite.base.AndroidxBaseActivity; import com.pengxh.androidx.lite.divider.ItemDecoration; import com.pengxh.androidx.lite.hub.FloatHub; +import com.pengxh.androidx.lite.hub.IntHub; import com.pengxh.androidx.lite.hub.LongHub; import com.pengxh.androidx.lite.utils.ImmerseStatusBarManager; import com.pengxh.androidx.lite.vm.LoadState; @@ -41,8 +41,8 @@ @Override protected void setupTopBarLayout() { - ImmerseStatusBarManager.setColor(this, ContextCompat.getColor(this, R.color.mainThemeColor)); - ImmersionBar.with(this).statusBarDarkFont(false).init(); + ImmerseStatusBarManager.setColor(this, IntHub.convertColor(this, R.color.white)); + ImmersionBar.with(this).statusBarDarkFont(true).init(); viewBinding.titleBarLayout.titleView.setText(LocaleConstant.ANALYSIS_ITEMS.get(5)); viewBinding.titleBarLayout.leftBackView.setOnClickListener(v -> finish()); diff --git a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java index ac06208..8742670 100644 --- a/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java +++ b/app/src/main/java/com/casic/dcms/vm/DataAnalysisViewModel.java @@ -8,6 +8,8 @@ import com.casic.dcms.model.DeptHandleConditionBean; import com.casic.dcms.model.GridAnalysisBean; import com.casic.dcms.model.HighEventBean; +import com.casic.dcms.model.PunishRankingBean; +import com.casic.dcms.model.PunishTypeStatisticBean; import com.casic.dcms.utils.StringHelper; import com.casic.dcms.utils.retrofit.RetrofitServiceManager; import com.google.gson.Gson; @@ -30,6 +32,8 @@ public MutableLiveData deptHandleConditionModel = new MutableLiveData<>(); public MutableLiveData gridAnalysisData = new MutableLiveData<>(); public MutableLiveData caseTendencyData = new MutableLiveData<>(); + public MutableLiveData typeStatisticData = new MutableLiveData<>(); + public MutableLiveData rankingData = new MutableLiveData<>(); public void getCityBaseData() { loadState.setValue(LoadState.Loading); @@ -228,4 +232,67 @@ } }); } + + public void getPunishTypeStatistic(String begTime, String endTime) { + loadState.setValue(LoadState.Loading); + Observable observable = RetrofitServiceManager.getPunishTypeStatistic(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + loadState.setValue(LoadState.Success); + } + + @Override + public void onError(Throwable e) { + loadState.setValue(LoadState.Fail); + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishTypeStatisticBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + typeStatisticData.setValue(resultBean); + } else { + loadState.setValue(LoadState.Fail); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + + public void getPunishRanking(String begTime, String endTime) { + Observable observable = RetrofitServiceManager.getPunishRanking(begTime, endTime); + ObserverSubscriber.addSubscribe(observable, new OnObserverCallback() { + @Override + public void onCompleted() { + + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onNext(ResponseBody responseBody) { + try { + String response = responseBody.string(); + int responseCode = StringHelper.separateResponseCode(response); + if (responseCode == 200) { + PunishRankingBean resultBean = gson.fromJson(response, new TypeToken() { + }.getType()); + rankingData.setValue(resultBean); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } } diff --git a/app/src/main/res/layout/activity_case_resource.xml b/app/src/main/res/layout/activity_case_resource.xml index 671d92b..afdaa4a 100644 --- a/app/src/main/res/layout/activity_case_resource.xml +++ b/app/src/main/res/layout/activity_case_resource.xml @@ -7,7 +7,7 @@ + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> + layout="@layout/include_sub_base_title" /> - + android:layout_height="match_parent" + android:orientation="vertical"> - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_trend_analysis.xml b/app/src/main/res/layout/activity_trend_analysis.xml index dd1098b..53fd8c7 100644 --- a/app/src/main/res/layout/activity_trend_analysis.xml +++ b/app/src/main/res/layout/activity_trend_analysis.xml @@ -7,7 +7,7 @@ + layout="@layout/include_sub_base_title" />